C# 系统菜单弹出框方向

 C# 系统菜单弹出框方向

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

原文作者:唐宋元明清

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

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

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

参考资料

[1]

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


原文始发于微信公众号(WPF开发者):C# 系统菜单弹出框方向

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/55063.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!