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(null, false);
}
}
}
-
之后在相应的窗口下,调用此方法 MenuDropAlignmentHelper.DisableSystemMenuAlignment
即可。
参考文章:WPF Handedness with Popups[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