zoukankan      html  css  js  c++  java
  • C# 系统菜单弹出框方向

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

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

    当右对齐时,值为false

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

     如何在软件中强制向右弹出显示?

    可以设置SystemParameters.MenuDropAlignment值,因为没有公开属性的set方法,只能用反射去修改了。

     1     public static class MenuDropAlignmentHelper
     2     {
     3         private static FieldInfo _menuDropAlignmentField;
     4         public static void DisableSystemMenuAlignment()
     5         {
     6             _menuDropAlignmentField = typeof(SystemParameters).GetField("_menuDropAlignment", BindingFlags.NonPublic | BindingFlags.Static);
     7 
     8             EnsureStandardPopupAlignment();
     9             SystemParameters.StaticPropertyChanged -= SystemParameters_StaticPropertyChanged;
    10             SystemParameters.StaticPropertyChanged += SystemParameters_StaticPropertyChanged;
    11         }
    12 
    13         private static void SystemParameters_StaticPropertyChanged(object sender, PropertyChangedEventArgs e)
    14         {
    15             EnsureStandardPopupAlignment();
    16         }
    17 
    18         private static void EnsureStandardPopupAlignment()
    19         {
    20             if (SystemParameters.MenuDropAlignment)
    21             {
    22                 _menuDropAlignmentField?.SetValue(null, false);
    23             }
    24         }
    25     }

    之后在相应的窗口下,调用此方法MenuDropAlignmentHelper.DisableSystemMenuAlignment即可。

    参考文章:

    WPF Handedness with Popups

     

  • 相关阅读:
    Windows统一平台: 开发小技巧
    How to install more voices to Windows Speech?
    Why does my ListView scroll to the top when navigating backwards?
    中文圣经 for Android
    [ CodeVS冲杯之路 ] P1166
    [ CodeVS冲杯之路 ] P1154
    [ CodeVS冲杯之路 ] P1048
    [ CodeVS冲杯之路 ] P1063
    [ CodeVS冲杯之路 ] P3027
    理解矩阵乘法
  • 原文地址:https://www.cnblogs.com/kybs0/p/13555206.html
Copyright © 2011-2022 走看看