Выделите элемент управления WPF, когда он получает фокус

Я работаю над приложением WPF с множеством экранов, и на каждом экране есть множество элементов управления. Стало очень трудно определить, какой элемент управления имеет фокус.

Поэтому я хочу выделить элемент управления, который в настоящее время сосредоточен на нем. Это может быть текстовое поле, кнопка, поле со списком, список или сетка.

Было бы лучше, если бы мы могли сделать это с помощью стилей и триггеров.

Спасибо


person MegaMind    schedule 14.06.2012    source источник


Ответы (3)


Вы должны использовать триггер для правильного события. В вашем случае это IsFocused. Простой пример:

<Trigger Property="IsFocused" Value="true">
    <Setter Property="BorderBrush" Value="Red" />
    <Setter Property="BorderThickness" Value="1" />
</Trigger>

Вам следует использовать тег Style, если вы хотите применить этот стиль для определенного типа элемента управления (например, используйте TargetType="{x:Type TextBox}").

Если вы хотите применить его ко всем элементам управления в своем приложении, вам следует рассмотреть возможность использования базового стиля только с таким типом триггера, а не просто наследовать его в ваших пользовательских стилях с помощью атрибута BasedOn: <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource BaseFocusStyle}">

Хорошим примером того, как это сделать, является вопрос SO: style-to-be-applied">Как заставить Style.Triggers запускать применение стиля с другим именем".

person gahcep    schedule 14.06.2012

Я бы предложил использовать визуальные состояния в пользовательских стилях для каждого элемента управления. Все стандартные элементы управления будут поддерживать это визуальное состояние. Например, проверьте стиль MSDN для кнопки, вы заметите визуальное состояние для сфокусированного. Эта статья MSDN также может вам помочь .

person dodsky    schedule 14.06.2012

Вы также можете попробовать создать украшение для этого поведения; если вы открыты для использования сторонней библиотеки с открытым исходным кодом, взгляните на эту реализацию на codeplex, вы также можете просмотреть код, чтобы получить представление о том, как реализовать собственное украшение -

http://uiannotations.codeplex.com/wikipage?title=Adorners&referringTitle=Documentation

введите здесь описание изображения

Другой аналогичный вопрос с подробностями о других решениях - has-focus">Многоразовый способ поместить ярко-красную рамку вокруг любого элемента, который в данный момент находится в фокусе?

person akjoshi    schedule 14.06.2012