zoukankan      html  css  js  c++  java
  • WPF Popup MenuDropAlignment 系统菜单弹出框方向问题

    右键菜单,tootip等弹出时,弹出的位置经常在左侧,使用体验不好。

    弹出方向有左对齐和右对齐 SystemParameters.MenuDropAlignment

    当右对齐时,值为false

    可以在控制面板中查看当前的设置:

     如何在软件中强制向右弹出显示?

    可以设置SystemParameters.MenuDropAlignment值,因为没有公开属性的set方法,只能用反射去修改了。

    public static class MenuDropAlignmentHelper
        {
            private static FieldInfo _menuDropAlignmentField;
            public static void DisableSystemMenuAlignment()
            {
                _menuDropAlignmentField = typeof(SystemParameters).GetField("_menuDropAlignment", BindingFlags.NonPublic | BindingFlags.Static);
    
                EnsureStandardPopupAlignment();
                SystemParameters.StaticPropertyChanged -= SystemParameters_StaticPropertyChanged;
                SystemParameters.StaticPropertyChanged += SystemParameters_StaticPropertyChanged;
            }
    
            private static void SystemParameters_StaticPropertyChanged(object sender, PropertyChangedEventArgs e)
            {
                EnsureStandardPopupAlignment();
            }
    
            private static void EnsureStandardPopupAlignment()
            {
                if (SystemParameters.MenuDropAlignment)
                {
                    _menuDropAlignmentField?.SetValue(null, false);
                }
            }
        }

    之后在相应的窗口下,调用此方法MenuDropAlignmentHelper.DisableSystemMenuAlignment即可。

    参考文章:

    https://stackoverflow.com/questions/18113597/wpf-handedness-with-popups

    来自:https://www.cnblogs.com/kybs0/p/13555206.html

  • 相关阅读:
    java多线程(八)-死锁问题和java多线程总结
    java多线程(七)-线程之间的 协作
    java多线程(六)-线程的状态和常用的方法
    在SOUI中使用网格布局
    SOUI视频教程
    在SOUI中使用动态多语言切换
    在SOUI中使用窗口自適應大小
    在SOUI中使用线性布局
    搜索引擎广告过滤Chrome插件
    第三十四篇:在SOUI中使用异步通知
  • 原文地址:https://www.cnblogs.com/ilison/p/13815217.html
Copyright © 2011-2022 走看看