15

在将 WPF 应用程序移植到在 VMware 下运行的 Windows 8 实例 (x64) 时,我发现所有弹出窗口都与它们应有的位置不一致。进一步的调查表明,即使对于新创建的项目,这也是一个常见的“问题”。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

进一步调查显示,控制面板中有一个设置:控制面板->硬件和声音->平板电脑(节点名称可能不完全匹配,因为我使用的是非英文版的 Windows 8)。有一个用户喜欢书写的手的设置。

根据 .net 框架的手册,必须选择“我更喜欢用左手书写”才能将弹出窗口放置在“正确的位置”(不使用上述解决方案)。这个假设根本不正确,至少对于 destop 应用程序!

于 2012-10-17T07:49:43.250 回答