WPF菜单显示在窗口左侧。

7

我有一个简单的菜单在 DockPanel 中。以下是 XAML 代码:

<Window x:Class="WpfApplication1.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>
    <Menu DockPanel.Dock="Top">
        <MenuItem Name="file" Header="_File">
            <MenuItem Name="exitMenuItem" Header="E_xit"/>
        </MenuItem>
    </Menu>
    <Grid>
    </Grid>
</DockPanel>

为什么这个菜单向窗口边界的左侧弹出,而不是像大多数应用程序一样弹出到右侧呢?

你的代码在 XP 上显示的菜单项没有在截图中显示在左边。 - Aaron McIver
有趣。我会在我的Win XP虚拟机中尝试它。我正在使用Win 7 x64。 - Nate
你说得对。XP不会产生相同的结果。唉。 - Nate
这在我每个WPF应用程序上都发生(包括VS 2010)在W7 x64上。 - Reed Copsey
1
请查看此Windows修复程序,看是否有帮助。 - Zamboni
2个回答

8

看起来您使用的是平板输入设备。请按照以下链接中的说明更改您的平板电脑设置,以改变左右手惯用性:


我敢打赌就是这样。我有一个触摸屏连接着。我星期一会去检查一下。谢谢。 - Nate
1
那就是问题所在!奇怪的是,右手配置是默认设置,并且将所有菜单发送到左侧。我想这是因为在平板电脑上,右手会遮挡菜单。但是,当您的机器是笔记本电脑时,即使外部触摸屏未连接,菜单仍然出现在左侧,这仍然非常令人恼火。哦,好吧。感谢您的帮助。 - Nate
3
网址现在无效。 - antikbd

2
我用的一个有效的解决方法是:
        var ifLeft = SystemParameters.MenuDropAlignment;
        if (ifLeft)
        {
            // change to false
            var t = typeof(SystemParameters);
            var field = t.GetField("_menuDropAlignment", BindingFlags.NonPublic | BindingFlags.Static);
            field.SetValue(null, false);
            ifLeft = SystemParameters.MenuDropAlignment;
        }

来源: https://www.telerik.com/forums/popup-is-opening-to-outside-window-in-splitbutton


很酷。链接加一。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接