一、问题描述
当你搜到这个帖子的时候,相信你和我一样也遇到了如下图所示的问题吧!在WinForm中从来没有存在过的问题,为什么到了WPF这儿会产生这种诡异的现象?如果你有同样的问题,那么恭喜你!你成功找到解决方案啦!
二、问题原因
问题产生的原因是你和我的电脑一样支持手写,或者是你曾经使用过手写板,那么想必此时你电脑的状态栏中一定有这样的一个图标。
没错!导致菜单栏向右弹出的罪魁祸首就是这个东西,因为系统默认你是惯用右手者,在你触屏的时候WPF为了防止你的手挡住菜单栏,所以才导致的右对齐弹出。
PS:虽然这个本应该是WPF比WinForm高级的地方,但是对于用过手写板的开发者和用户反而成了累赘。
三、解决方案
为了恢复传统的下拉菜单左对齐,在你的MainWindow(就是你程序第一个启动的窗口)的InitializeComponent()后面加上下面这段代码,你的问题就彻底解决啦!
//获取系统是以Left-handed(true)还是Right-handed(false)
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;
}