C# 系统菜单弹出框方向

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

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

  • 当右对齐时,值为false

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

C# 系统菜单弹出框方向
  • 如何在软件中强制向右弹出显示?

  • 可以设置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即可。