15

VMware で実行されている Windows 8 インスタンス (x64) に WPF アプリケーションを移植しているときに、すべてのポップアップが本来あるべきものとずれていることがわかりました。さらに調査を進めると、これは新しく作成されたプロジェクトであっても共通の「問題」であることが明らかになりました。WPFのポップアップコントロールは左右の意味が変わったようです!この問題は、vs 2012 を使用して wpf アプリケーションを作成し、次のようなポップアップを配置することで表示できます。

<Grid Background="Gray">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="129*"/>
        <ColumnDefinition Width="264*"/>
        <ColumnDefinition Width="124*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="30"/>
        <RowDefinition Height="30"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <DockPanel Grid.Row="1" Grid.Column="1" Background="LightGray">
        <Popup StaysOpen="True" IsOpen="True" Grid.RowSpan="2" Placement="Right"  AllowsTransparency="True" >
            <TextBlock Text="Right" Foreground="White" />
        </Popup>
        <Popup StaysOpen="True" IsOpen="True" Grid.RowSpan="2" Placement="Left" AllowsTransparency="True"  >
            <TextBlock Text="Left" Foreground="White" />
        </Popup>
        <Popup StaysOpen="True" IsOpen="True" Grid.RowSpan="2" Placement="Top"  AllowsTransparency="True" >
            <TextBlock Text="Top" Foreground="White" />
        </Popup>
        <Popup StaysOpen="True" IsOpen="True" Grid.RowSpan="2" Placement="Bottom"  AllowsTransparency="True"  >
            <TextBlock Text="Bottom" Foreground="White" />
        </Popup>
    </DockPanel>
</Grid>

左に表示されるはずのポップアップが右に表示されたり、左下にあるはずのポップアップが右下に表示されたり…。

私の質問は次のとおりです。1) これはバグですか、それとも機能ですか? 2) それが機能の場合、Windows 7 と Windows 8 内で同じように動作するように、コードに最小限の変更を加えるにはどうすればよいですか?

4

1 に答える 1

18

さらに調査すると、コントロール パネル内に次のような設定があることがわかりました。[コントロール パネル] -> [ハードウェアとサウンド] -> [タブレット PC] (英語版以外の Windows 8 を使用しているため、ノード名が正確に一致しない可能性があります)。ユーザーが書きたい手の設定があります。

.net フレームワークのマニュアルに従って、(上記のソリューションを使用せずに) ポップアップを「正しい位置」に配置するには、「左手で書くことを好む」を選択する必要があります。この仮定は、少なくとも destop アプリケーションではまったく正しくありません。

于 2012-10-17T07:49:43.250 に答える