WPF中Popup控件在Win7以及Win10等中的對齊點方式不一樣的解決方案 - 簡書
最近項目中使用彈出控件Popup,發現彈出框的對齊方式在不同的系統中存在不同(Popup在win10上是彈出在左邊,Win7上是彈出在右邊)。現在記錄解決方案於此:
修改彈出菜單相對於相應菜單項是左對齊還是右對齊
// 解決Popup控件在Win7以及Win10等系統中的對齊點方式不一樣的問題(以下兩種方法均OK)
using System.Reflection; // 方法一
using System.Runtime.InteropServices; // 方法二
[DllImport("user32.dll", EntryPoint = "SystemParametersInfo", SetLastError = true)]
public static extern bool SystemParametersInfoSet(uint action, uint uiParam, uint vparam, uint init);
public static void FixPopupBug()
{
//// 方法一
//var ifLeft = SystemParameters.MenuDropAlignment;
//if (ifLeft)
//{
// var t = typeof(SystemParameters);
// var field = t.GetField("_menuDropAlignment", BindingFlags.NonPublic | BindingFlags.Static);
// field.SetValue(null, false);
//}
// 方法二
SystemParametersInfoSet(0x001C /*SPI_SETMENUDROPALIGNMENT*/, 0, 0, 0);
}
將win10下彈出菜單默認彈出到左邊改為右邊。 在App.xaml.cs的OnStartup函數裏調用一下。
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
FixPopupBug();
}
WPF中Popup控件在Win7以及Win10等中的對齊點方式不一樣的解決方案 - 簡書