在将 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 中以相同的方式执行?