Стилизация фокуса в элементах управления и FocusVisualStyle
Windows Presentation Foundation (WPF) предоставляет два параллельных механизма для изменения внешнего вида элемента управления, получивший фокус клавиатуры. Первый механизм — использование методов задания свойств для свойств, таких как Is
Назначение визуального стиля фокуса
Функция визуального стиля фокуса предоставляет общую "объектную модель" для введения визуальной обратной связи с пользователем на основе навигации с помощью клавиатуры к любому элементу пользовательского интерфейса. Это можно сделать без применения нового шаблона к элементу управления или знания композиции определенного шаблона.
Но именно потому, что функция визуального стиля фокуса работает без знания шаблонов элементов управления, визуальная обратная связь, которая может отображаться для элемента управления с использованием визуального стиля фокуса, ограничена в обязательном порядке. Эта функция фактически накладывает другое визуальное дерево (декоративный элемент) поверх визуального дерева, созданного при отрисовке элемента управления с помощью его шаблона. Определить это отдельное визуальное дерево с использованием стиля, который заполняет Focus
Поведение визуального стиля фокуса по умолчанию
Визуальные стили фокуса действуют только тогда, когда действие фокусировки было инициировано клавиатурой. Любое действие мыши или программное изменение фокуса отключает режим визуальных стилей фокуса. Дополнительные сведения о различиях между режимами фокуса см. в разделе Общие сведения о фокусе.
Темы для элементов управления включают поведение визуального стиля фокуса по умолчанию, который становится визуальным стилем фокуса для всех элементов управления в теме. Этот стиль темы определяется значением статического ключа Focus
В темах визуальный стиль фокуса по умолчанию обычно очень прост. Ниже приводится приблизительная оценка.
<Style x:Key="{x:Static SystemParameters.FocusVisualStyleKey}">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle StrokeThickness="1"
Stroke="Black"
StrokeDashArray="1 2"
SnapsToDevicePixels="true"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Когда следует использовать визуальные стили фокуса
Концептуально внешний вид визуальных стилей фокуса, применяемых к элементам управления, должен быть согласованным в различных элементах. Одним из способов обеспечить такую согласованность является изменение визуального стиля фокуса только при составлении целой темы, в которой каждый элемент управления, определенный в теме, получает либо один и тот же визуальный стиль фокуса, либо некоторую вариацию стиля, визуально связанную с другими элементами управления. Кроме того, можно использовать один и тот же стиль (или аналогичные стили) для каждого элемента, фокусируемого с клавиатуры, на странице или в пользовательском интерфейсе.
Параметр Focus
Визуальные стили фокуса действуют исключительно для фокуса клавиатуры. Таким образом, визуальные стили фокуса являются функцией специальных возможностей. Если требуется изменять пользовательский интерфейс для какого-либо типа фокуса с помощью мыши, клавиатуры или программными средствами, то не следует использовать визуальные стили фокуса. Вместо этого используйте методы задания и триггеры в стилях или шаблонах, которые работают на основе значения общих свойств фокуса, таких как Is
Создание визуального стиля фокуса
Стиль, создаваемые для визуального стиля фокуса, всегда должен иметь Target
Так как целевым типом всегда является Control, нужно создать стиль, с помощью свойств, которые являются общими для всех элементов управления (с помощью свойств класса Control класса и его базовых классов). Необходимо создать шаблон, который будет правильно функционировать как наложение для элемента пользовательского интерфейса и не будет скрывать функциональные области элемента управления. Как правило, это означает, что визуальная обратная связь должна появляться за пределами полей управления или в качестве временных или ненавязчивых эффектов, которые не будут блокировать проверку нажатий в элементе управления, к которому применен визуальный стиль фокуса. Свойства, которые можно использовать в привязке шаблона, которые можно использовать для определения размеров и расположения шаблона наложения включают Actual
Альтернативные варианты использования визуального стиля фокуса
В ситуациях, когда использование визуального стиля фокуса нецелесообразно (при стилизации только отдельных элементов управления или если необходим больший контроль над шаблоном элемента управления), существует множество других доступных свойств и методов, которые могут создавать визуальное поведение в ответ на изменения фокуса.
Триггеры, методы задания и методы задания событий рассматриваются подробно в разделе Использование стилей и шаблонов. Обработка перенаправляемых событий рассматривается в разделе Общие сведения о перенаправляемых событиях.
IsKeyboardFocused
Если вас интересует именно фокус клавиатуры, Is
Другим похожим свойством зависимостей является Is
Можно также использовать события Got
Другие свойства фокуса
Если требуется, чтобы все возможные причины изменения фокуса для порождали визуальное поведение, следует установить метод доступа или триггер на Is