WPF中Popup等彈窗的位置不對(偏左或者偏右)
阿新 • • 發佈:2018-07-07
wrong null msh flag 方法 ram 位置 cnblogs class 原文:WPF中Popup等彈窗的位置不對(偏左或者偏右)
1.情況如圖:
正常情況: 部分特殊情況:
在一般的電腦都能正確顯示,就是第一種情況,同樣的代碼為什麽在不同的電腦就會顯示不同的位置呢,原來Windows為了滿足
不同需求的用戶,左撇子和右撇子,就會顯示不同的情況,在顯示異常的電腦中,在運行中輸入Table 如果出現下圖中的內容:
就是那個Table PC settings中的設置導致的,點擊它,然後進入other,就可以看到
有Right-handed和Left-handed, 這兩個選項就是問題的根源
2. 那麽在代碼中如何處理呢,肯定不能讓用戶自己去手動修改吧,那麽解決方法如下:
1 public static void SetAlignment() 2 { 3 //獲取系統是以Left-handed(true)還是Right-handed(false) 4 var ifLeft = SystemParameters.MenuDropAlignment; 5 6 if (ifLeft) 7 { 8 // change to false 9 varView Codet = typeof(SystemParameters); 10 var field = t.GetField("_menuDropAlignment", BindingFlags.NonPublic | BindingFlags.Static); 11 field.SetValue(null, false); 12 13 ifLeft = SystemParameters.MenuDropAlignment; 14 } 15 }
參考:http://stackoverflow.com/questions/18113597/wpf-handedness-with-popups
和https://social.msdn.microsoft.com/Forums/vstudio/en-US/19ef3d33-01e5-45c5-a845-d64f9231001c/popup-positioningalignments?forum=wpf
http://www.tomshardware.com/forum/37096-63-popups-menus-wrong-side
WPF中Popup等彈窗的位置不對(偏左或者偏右)