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