1. 程式人生 > >WPF中Popup控件在Win7以及Win10等中的對齊點方式不一樣的解決方案 - 簡書

WPF中Popup控件在Win7以及Win10等中的對齊點方式不一樣的解決方案 - 簡書

方法 ase .get sta href ide public content tla

原文: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等中的對齊點方式不一樣的解決方案 - 簡書