Фокус клавиатуры WPF 4: никогда не получать ключевые события - PullRequest
1 голос
/ 06 декабря 2010

В WPF 4.0 я не могу заставить работать какие-либо сочетания клавиш, если после загрузки я переключаю пользовательский элемент управления в окне.Пример кода говорит тысячу слов, вот что я делаю:

Window window = new Window { Width = 800, Height = 600 };
window.Loaded += delegate
{
    editor = new EditorRoot();
    window.Content = editor;
};
app.Run(window);

window получает события KeyDown (и маршрутизируемые команды работают нормально), но editor никогда не получает никаких событий клавиатуры (ниделать какие-либо элементы управления в нем).Я попробовал:

editor.Loaded += (sender, e) => Keyboard.Focus(editor);

... но это ничего не дало.EditorRoot расширяет UserControl и имеет IsFocusable=true Есть идеи, что не так?

Ответы [ 2 ]

2 голосов
/ 06 декабря 2010

И если это не работает - используйте Dispatcher.BeginInvoke.Из моего опыта - синхронная установка фокуса не всегда работает.И не только в WPF 4.

2 голосов
/ 06 декабря 2010

Может быть, вы могли бы попробовать FocusManager вместо вашего подхода.Я использую его, и он работает, вы даже можете использовать его в XAML:

         FocusManager.FocusedElement=editor;
...