WPF и начальный фокус

191

Кажется, что когда приложение WPF запускается, ничто не имеет фокуса.

Это действительно странно. Любой другой фреймворк, который я использовал, делает именно то, что вы ожидаете: сначала фокусируется на первом элементе управления в порядке вкладок. Но я подтвердил, что это WPF, а не только мое приложение - если я создаю новое окно и просто помещаю в него TextBox и запускаю приложение, TextBox не будет иметь фокуса, пока я не нажму на него или не нажму Tab , Тьфу.

Мое настоящее приложение более сложное, чем просто текстовое поле. У меня есть несколько слоев UserControls в UserControls. Один из этих UserControls имеет обработчики Focusable = "True" и KeyDown / KeyUp, и я хочу, чтобы он имел фокус, как только откроется мое окно. Я все еще новичок в WPF, и мне не очень повезло, когда я понимаю, как это сделать.

Если я запускаю свое приложение и нажимаю клавишу Tab, то фокус переходит к моему фокусируемому элементу управления, и он начинает работать так, как я хочу. Но я не хочу, чтобы мои пользователи нажимали Tab, чтобы начать использовать окно.

Я поиграл с FocusManager.FocusedElement, но я не уверен, какой элемент управления для него установить (Окно верхнего уровня - родительский элемент, который содержит фокусируемый элемент управления - сам фокусируемый элемент управления?) Или какой его установить.

Что мне нужно сделать, чтобы мой глубоко вложенный элемент управления имел первоначальный фокус, как только откроется окно? Или еще лучше: сфокусировать первый фокусируемый элемент управления в порядке табуляции?

Джо Уайт
источник

Ответы:

165

Это тоже работает:

<Window FocusManager.FocusedElement="{Binding ElementName=SomeElement}">

   <DataGrid x:Name="SomeElement">
     ...
   </DataGrid>
</Window>
Шон
источник
4
Я удивлен, что я первый человек, который прокомментировал это. Я был смущен относительно того, куда это пошло, потому что это могло пойти почти на любой контроль. Отвечая на этот конкретный вопрос, я думаю, что он появится в окне, но вы можете прочитать замечания на msdn.microsoft.com/en-us/library/…, чтобы понять, как этот элемент управления имеет значение.
Джоэл МакБет
Я успешно использовал этот подход на стековой панели. Если кому-то интересно, есть пример на stackoverflow.com/a/2872306/378115
Хулио Нобре
Это сработало для меня намного лучше, чем принятый ответ, потому что мне нужно сосредоточиться на элементе, который стоит после первого.
Puterdo Borato