這似乎很容易,但它絕對不能按預期工作。在WPF 4.0中,我試圖創建一個窗口,其中包含一個接受鍵盤快捷鍵的菜單欄......只是一個簡單的窗口,頂部的菜單欄和其他一些內容(AvalonDock,這可能是問題的一部分)。wpf鍵盤焦點:菜單打開後失去焦點?
有一個問題:菜單欄&內容位於另一個用戶控件(我們稱之爲SadPanda
,因爲它使我成爲一隻悲傷的熊貓),這是窗口的直接內容。邏輯層次結構看起來是這樣的(而不是實際的XAML):
<Window>
<UserControl x:Name="SadPanda" Focusable="True" FocusManager.IsFocusScope="True">
<Grid>
<MenuBar/>
<AvalonDock:DockingManager>
<PandaFood>
</AvalonDock:DockingManager>
</Grid>
</UserControl>
</Window>
窗口的內容需要訪問窗口的句柄,所以它的窗口加載這樣設置後:
window.Loaded += delegate { window.Content = new SadPanda(); };
菜單欄&快捷方式有路由命令綁定到SadPanda,並且當鍵盤焦點丟失時,輸入手勢不再起作用,因此悲傷的熊貓。我添加了這個:
LostKeyboardFocus += (sender, e) => Debug.WriteLine("Lost focus to " + e.NewFocus);
GotKeyboardFocus += (sender, e) => Debug.WriteLine("Got focus from " + e.OldFocus);
...似乎重點是返回到窗口,而不是SadPanda本身。如果我在窗口上設置了Focusable =「False」,則焦點變爲空;控制從來沒有考慮過。我試圖(通過評論的α-鼠標建議):
window.GotKeyboardFocus += delegate { Keyboard.Focus(sadPanda); };
即使這不工作 - 它可以防止開放的菜單(他們閃光燈打開了一秒鐘,然後消失),或從曾經獲得焦點的文本框......不知道爲什麼;它似乎是一個完美的解決方案。
基本上,我希望用戶控件擁有頂級的鍵盤焦點,而不是窗口。什麼是最簡單的方法來實現這一點?
試過了;不起作用; -P。無論出於何種原因,這會導致菜單在打開時立即關閉。 – 2010-12-16 03:45:19