WPF功能区应用程序菜单放置错误

时间:2016-12-22 19:53:24

标签: c# wpf

我有一个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桌面计算机上,一切都可以正常呈现: Ribbon application menu looks OK on desktops

但是Surface Pro(也运行Windows 10)上的菜单位置奇怪: enter image description here

首先,我尝试通过更改显示器的DPI设置(100%=> 150%)以匹配Surface来重现我的开发机器上的问题。这没用;应用程序仍然正常运行。

接下来,我尝试使用自定义样式覆盖菜单弹出窗口的位置:

<RibbonApplicationMenuItem.Resources>
    <Style TargetType="Popup">
        <Setter Property="Placement" Value="Right" />
    </Style>
</RibbonApplicationMenuItem.Resources>

在Surface上,菜单似乎完全忽略Placement属性。使用相同的样式我可以调整Horizo​​ntalOffset和VerticalOffset属性,但它似乎忽略了我尝试对PlacementTarget进行的任何更改。我尝试将弹出窗口相对于顶级窗口定位,但它似乎忽略了我的首选放置目标并始终使用父菜单项。

之前是否有人遇到此问题?希望知道如何解决它?

1 个答案:

答案 0 :(得分:2)

这是由于笔选项上的手性设置。 (有关确切设置,请参阅this tutorial。)

要忽略/覆盖左右手设置,请检查以下问题:WPF Handedness with Popups

更新:移动配置的非平板电脑的handeness设置请检查此link