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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.