wpf Popup Win8.0 bug HorizontalOffset 弹出位置偏移

问题描述参考 

wpf 客户端【JDAgent桌面助手】开发详解(四) popup控件的win8.0的bug

当开发完程序后,我们在多操作系统测试时候发现:win8.0  系统中 popup 弹出的位置老是不对。

如下图:

WinXp /Vista/Win7/Win8.1 下面windows 右键菜单弹出的位置(红色圈为 鼠标指针位置)

Win8.0 下面windows 右键菜单弹出的位置(红色圈为 鼠标指针位置)

 

 

Popup 控件也是这个情况。需要在代码里面判断windows的版本。如果是win8.0 popup 的HorizontalOffset、VerticalOffset值需要调整。

 

 

解决方案一。。通过注册表来获取当前系统版本

    因为  Environment.OSVersion.Version 获取到的win8.0跟win8.1信息是一样的。

    通过注册表获取win8.0代码为6.2 ,win8.1代码为6.3

       public static string SetRegister()
       {
           string regpath = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
           RegistryKey uaes = Registry.LocalMachine.OpenSubKey(regpath,
               RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl);
           if (uaes == null)
               uaes = Registry.LocalMachine.CreateSubKey(regpath, RegistryKeyPermissionCheck.ReadWriteSubTree);

           var registData = uaes.GetValue("CurrentVersion").ToString();

           return registData;
       }

    注意,,这种方法需要添加管理员权限。。

 

解决方案二。修改弹出菜单相对于相应菜单项是左对齐还是右对齐。(组长调出的)

  

        public static void FixPopupBug()
        {
            var ifLeft = SystemParameters.MenuDropAlignment;
            if (ifLeft)
            {
                var t = typeof(SystemParameters);
                var field = t.GetField("_menuDropAlignment", BindingFlags.NonPublic | BindingFlags.Static);
                field.SetValue(null, false);
            }
           
        }

  将win8.0下弹出菜单默认弹出到左边改为右边。  在App.xaml.cs的构造函数里调用一下。

 

转载于:https://www.cnblogs.com/m7777/p/4487079.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值