Это кажется очень простым, но это определенно не работает должным образом. В WPF 4.0 я пытаюсь создать окно с панелью меню, которая принимает сочетания клавиш ... Простое окно, панель меню наверху и некоторые другие вещи (внутри AvalonDock, что может быть частью проблемы).фокус клавиатуры фокуса: потеря фокуса после открытия меню?
Существует один улов: панель меню & контента находятся в другом пользовательском контроле (назовем его SadPanda
, потому что это делает меня печальной пандой), это прямое содержимое окна. Логическая иерархия выглядит примерно так (не фактического XAML):
<Window>
<UserControl x:Name="SadPanda" Focusable="True" FocusManager.IsFocusScope="True">
<Grid>
<MenuBar/>
<AvalonDock:DockingManager>
<PandaFood>
</AvalonDock:DockingManager>
</Grid>
</UserControl>
</Window>
содержимое окна нуждается в доступе к Handle окна, поэтому он установлен после окна нагрузок как это:
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