Dot-Net
帶有彈出視窗的 WPF 慣用手
我剛剛將我的 PC 從 Windows 7 移動到 Windows 8,在執行我們的 WPF 應用程序時,我注意到我們的 WPF 彈出視窗和/或工具提示現在預設位於左下角,而不是正常的右下角。有沒有人注意到這一點?我知道您可以在 xaml 中的每個工具提示上指定它們的位置,但是我們有很多工具提示和彈出視窗。我想知道是否有辦法在 WPF 應用程序中全域指定預設位置。Google在這個主題上沒有產生很多結果。我們有理由將它們保持在相同的原始預設位置(一些彈出視窗的內容相對於它們的啟動位置)。
Windows 8:(左下)
Windows 7:(右下)
相同的程式碼!標準“工具提示”xaml 屬性。
有任何想法嗎?
解決了,我發表了評論
好的,我找到了問題所在。它與平板電腦/觸摸屏有關。(左撇子.. 右撇子偏好)這個其他連結提供了一個原因。我現在正在研究解決此問題的解決方案。我會盡快發布詳細資訊!
感謝@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); } }

