我刚刚将我的电脑从 Windows 7 迁移到 Windows 8,在运行我们的 WPF 应用程序时,我注意到我们的 WPF 弹出窗口和/或工具提示现在默认位于左下角,而不是正常的右下角。有人注意到这一点吗?我知道您可以在 xaml 中的每个工具提示上指定它们的位置,但我们有很多工具提示和弹出窗口。我想知道是否有一种方法可以在 WPF 应用程序中全局指定默认位置。谷歌在这个问题上还没有得出很多结果。我们有理由将它们保留在相同的原始默认位置(某些弹出窗口的内容与其启动位置相关)。
Windows 8:(左下)
Windows 7:(右下)
相同的代码!标准“工具提示”xaml 属性。
有任何想法吗?
已解决并发表评论
好的,我已经找到问题了。它与平板电脑/触摸屏有关。 (左手..右手偏好)另一个链接提供了一个原因。我现在正在研究一个解决方案来解决这个问题。我会尽快发布详细信息!
Windows 8 弹出位置 https://stackoverflow.com/questions/12927274/windows-8-popup-location
感谢@TravisWhidden 提供的解决方案。刚刚实现了它的改进版本,可以监听StaticPropertyChanged
事件,我将其粘贴到这里,因为它看起来不像“黑客”。
private static readonly FieldInfo _menuDropAlignmentField;
static MainWindow()
{
_menuDropAlignmentField = typeof(SystemParameters).GetField("_menuDropAlignment", BindingFlags.NonPublic | BindingFlags.Static);
System.Diagnostics.Debug.Assert(_menuDropAlignmentField != null);
EnsureStandardPopupAlignment();
SystemParameters.StaticPropertyChanged += SystemParameters_StaticPropertyChanged;
}
private static void SystemParameters_StaticPropertyChanged(object sender, PropertyChangedEventArgs e)
{
EnsureStandardPopupAlignment();
}
private static void EnsureStandardPopupAlignment()
{
if (SystemParameters.MenuDropAlignment && _menuDropAlignmentField != null)
{
_menuDropAlignmentField.SetValue(null, false);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)