yanjinhua

V1

2022/08/23阅读:18主题:蓝莹

C# 系统菜单弹出框方向

C# 系统菜单弹出框方向

本文经原作者授权以原创方式二次分享,欢迎转载、分享。

原文作者:唐宋元明清

原文地址: https://www.cnblogs.com/kybs0/p/13555206.html

  • 右键菜单,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(nullfalse);
            }
        }
    }
  • 之后在相应的窗口下,调用此方法MenuDropAlignmentHelper.DisableSystemMenuAlignment即可。

参考文章:WPF Handedness with Popups[1]

参考资料

[1]

参考文章:WPF Handedness with Popups: https://stackoverflow.com/questions/18113597/wpf-handedness-with-popups

分类:

后端

标签:

C#

作者介绍

yanjinhua
V1