关于WPF下拉式菜单默认右对齐问题的原因与解决方案

一、问题描述

当你搜到这个帖子的时候,相信你和我一样也遇到了如下图所示的问题吧!在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;
}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值