簡體   English   中英

按住修飾鍵時,所有 WPF 上下文菜單似乎都無法正確處理突出顯示的項目

[英]All WPF context menus do not seem to handle highlighting items properly when a modifier key is held down

它發生在我所有的 WPF 應用程序中,並且 Visual Studio 2019(絕對基於 WPF)也表現出這種奇怪的行為:

只需在按住 Control 鍵的同時右鍵單擊解決方案資源管理器中的一個項目,您應該注意到,如果您繼續按住 Control 修飾符,突出顯示的項目會間歇性地工作。

起初,我認為網格和列表控件仍在捕獲用於項目選擇的修飾鍵,但是這個問題也會出現在像標准按鈕這樣的簡單控件上的上下文菜單中。

有沒有辦法修復這個故障?


這是一個帶有 wpf 應用程序上下文菜單的 gif。 首先我正常移動鼠標,然后按住 Ctrl 鍵

如您所見,它出現故障(未突出顯示菜單項)。

MenuItem 會在按下某個鍵時設置一個內部標志,以暫時停止注冊鼠標事件,而不管它是否實際上是一個執行導航的鍵。 這反映了我所看到的行為,即當我按住任何鍵時,選擇會斷斷續續,而不僅僅是修飾符。 https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/windows/Controls/MenuItem.cs,2049

由於它是私有的,因此沒有正確的方法來解決這個問題。 但是,如果它很重要,您可以為所有MenuItem添加 KeyDown 處理程序,然后使用反射更改它

var menu = sender as MenuItem;
if (menu != null)
{
    var parent = ItemsControl.ItemsControlFromItemContainer(menu);
    MethodInfo setBoolField = menu.GetType().GetMethod("SetBoolField",
        BindingFlags.NonPublic | BindingFlags.Static);
    setBoolField.Invoke(this, new object[] { parent, 0x04, false });
}

如果需要,您可以先檢查該鍵是否為導航鍵以保留所需的行為。

我個人認為這是 WPF 中的一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM