我有一个 WPF 桌面应用程序。我收到来自 W8 用户的报告,称我们应用程序中的代码完成窗口未正确对齐。我调查并发现它在 W8 平板电脑设置中的设置与 wpf 中弹出窗口的放置相冲突
默认是右手,然后代码完成弹出窗口看起来像这样
当更改为左手时,代码完成弹出窗口会像这样正确呈现
有没有办法以编程方式强制应用程序使用左手设置,或者完全忽略它,使其像 w7 一样呈现?
编辑:得到了升级,因此可以使用解决方案进行更新,需要 .NET 4.5
private static readonly FieldInfo MenuDropAlignmentField;
static MyWindow()
{
MenuDropAlignmentField = typeof (SystemParameters).GetField("_menuDropAlignment",
BindingFlags.NonPublic | BindingFlags.Static);
System.Diagnostics.Debug.Assert(MenuDropAlignmentField != null);
EnsureStandardPopupAlignment();
SystemParameters.StaticPropertyChanged += (s, e) => EnsureStandardPopupAlignment();
}
private static void EnsureStandardPopupAlignment()
{
if (SystemParameters.MenuDropAlignment && MenuDropAlignmentField != null)
{
MenuDropAlignmentField.SetValue(null, false);
}
}
完整代码在这里
https://github.com/AndersMalmgren/FreePIE/blob/master/FreePIE.GUI/Shells/MainShellView.xaml.cs