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的构造函数里调用一下。

时间: 2024-11-09 01:40:02

wpf Popup Win8.0 bug HorizontalOffset 弹出位置偏移的相关文章

Android PopupWindow怎么合理控制弹出位置(showAtLocation)

说到PopupWindow,应该都会有种熟悉的感觉,使用起来也很简单 // 一个自定义的布局,作为显示的内容 Context context = null; // 真实环境中要赋值 int layoutId = 0; // 布局ID View contentView = LayoutInflater.from(context).inflate(layoutId, null); final PopupWindow popupWindow = new PopupWindow(contentView,

Winform窗口弹出位置控制

窗体的弹出位置可以由属性StartPosition来指定,默认值有: Manural 自定义,由属性Location指定: CenterScreen 屏幕中央: WindowsDefaultBounds  系统默认位置(但大小为系统默认窗体大小) WindowsDefaultLocation 系统默认位置(大小由属性Size指定) CenterParent 父窗体中央 若自定义窗体显示位置,则属性StartPosition选择Manural,然后指定属性Location的坐标值. 指定窗体显示位

自定义toast的学习(改变toast默认动画、弹出位置)

项目里用到了一个DrawerToast,查了一下是这位兄弟的东西:http://blog.csdn.net/pmavio/article/details/38817885 主要实现了不用等待toast的队列直接往上叠加.toast的动画自定义等效果. 根据需求主要要改动的有几点: 1.toast的位置,要在titlebar正下方. 2.当第二个toast出现的时候,不往上叠加,停止前面toast的动画.直接在同样位置显示第二个toast. 3.每种系统都有个默认的toast动画效果,这个会跟自定

Android 对话框弹出位置和透明度的设置

在Android中我们经常会用AlertDialog来显示对话框.通过这个对话框是显示在屏幕中心的.但在某些程序中,要求对话框可以显示在不同的位置.例如,屏幕的上方或下方.要实现这种效果.就需要获得对话框的Window对象,获得这个Window对象有多种方法.最容易的就是直接通过AlertDialog类的getWindow方法来获得Window对象. AlertDialog dialog = new AlertDialog.Builder(this).setTitle("title")

安装Loadrunner 11.0时,弹出缺少2.8 sp1组件--解决方案(win7)

这是因为注册表缺少FullInstallVer和Version,归根到底是madc安装的的问题 以下是解决方法: 1.运行regedit,打开注册表,进入HKEY_LOCAL_MACHINE\SOFTWARE\WOw6432Node\Microsoft\DataAccess, 2.具体如下图,新建->字符串值 "FullInstallVer"="2.82.3959.0" (注:由于各个win7的版本可能不同,这个数字也会不同)"Version&quo

my97日期控件弹出位置显示异常

使用my97日期选择控件的时候,如果整个页面是有滚动条的,根据触发显示日期的控件的父控件的position不同会显示不同的情况 1.position不为fixed则滑动滚动条,显示的日期层不会出现异常位移,如下图 滚动条不动,正常显示 滚动条没去,正常显示 2.position为fixed则滑动滚动税票,显示的日期层会根据滚动条的移动而移动,如下图 滚动条不动,正常显示 滚动条滑动,异常位移 对于第二种情况解决方法如下: 写一个方法 如下: function showDate() { $('if

背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu

原文:背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(弹出类) ToolTip Popup PopupMenu 示例1.ToolTip 的示例Controls/FlyoutControl/ToolTipDemo.xaml <Page x:Class="Windows10.Controls.FlyoutControl.ToolTipDemo&q

jQueryMobile的组件之弹出窗(popup)

data-rel="popup"--设置当前元素具有弹出窗的功能: data-role="popup"--设置当前元素为弹出窗: data-position-to="window"--设置弹出窗出现在窗口中间位置: data-transition="fade"--设置弹出窗出现的效果: <!DOCTYPE html> <html> <head lang="en"> <

JS弹出窗口代码大全(详细整理)

1.弹启一个全屏窗口 复制代码代码如下: <html> <body http://www.jb51.net','脚本之家','fullscreen');">; <b>www.jb51.net</b> </body> </html> 2.弹启一个被F11化后的窗口 复制代码代码如下: <html> <body 'http://www.jb51.net','脚本之家','channelmode');"