我有一个WPF应用程序,它使用Microsoft的System.Windows.Controls.Ribbon程序集中的Ribbon控件。应用程序菜单在我们的大多数机器上都能正确呈现,但在Surface Pro上,菜单项的定位很差。我想知道为什么Surface Pro表现出不同的行为,以及我可以尝试的其他步骤。
首先,这里有一些简单的XAML可用于重现问题(但仅限于Surface Pro):
<RibbonWindow x:Class="RibbonMenuTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<Ribbon DockPanel.Dock="Top" UseLayoutRounding="True" Background="#98C1F6" >
<Ribbon.ApplicationMenu>
<RibbonApplicationMenu>
<RibbonApplicationMenuItem Header="Menu item 1">
<RibbonApplicationMenuItem Header="Menu item 1.1" />
<RibbonApplicationMenuItem Header="Menu item 1.2" />
</RibbonApplicationMenuItem>
<RibbonApplicationMenuItem Header="Menu item 2">
<RibbonApplicationMenuItem Header="Menu item 2.1" />
<RibbonApplicationMenuItem Header="Menu item 2.2" />
</RibbonApplicationMenuItem>
<RibbonApplicationMenuItem Header="Menu item 3" />
<RibbonApplicationMenuItem Header="Menu item 4" />
</RibbonApplicationMenu>
</Ribbon.ApplicationMenu>
</Ribbon>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="Main content area" />
</DockPanel>
</RibbonWindow>
在我们的Windows 10桌面计算机上,一切都可以正常呈现:
但是Surface Pro(也运行Windows 10)上的菜单位置奇怪:
首先,我尝试通过更改显示器的DPI设置(100%=> 150%)以匹配Surface来重现我的开发机器上的问题。这没用;应用程序仍然正常运行。
接下来,我尝试使用自定义样式覆盖菜单弹出窗口的位置:
<RibbonApplicationMenuItem.Resources>
<Style TargetType="Popup">
<Setter Property="Placement" Value="Right" />
</Style>
</RibbonApplicationMenuItem.Resources>
在Surface上,菜单似乎完全忽略Placement属性。使用相同的样式我可以调整HorizontalOffset和VerticalOffset属性,但它似乎忽略了我尝试对PlacementTarget进行的任何更改。我尝试将弹出窗口相对于顶级窗口定位,但它似乎忽略了我的首选放置目标并始终使用父菜单项。
之前是否有人遇到此问题?希望知道如何解决它?
答案 0 :(得分:2)
这是由于笔选项上的手性设置。 (有关确切设置,请参阅this tutorial。)
要忽略/覆盖左右手设置,请检查以下问题:WPF Handedness with Popups。
更新:移动配置的非平板电脑的handeness设置请检查此link