Как проверить, что любой из трех элементов управления имеет фокус одновременно в wpf?
У меня есть три текстовых поля... и я хотел проверить, фокусируется ли какая-либо из этих трех.
Я попытался что-то вроде этого -> добавил три свойства в viewmodel..., значение которого будет переключаться событиями потерянного / полученного фокуса. (Я сделал это через прикрепленные свойства). Но в этом случае... если я перенесу фук из одного текстового поля в следующее... фокус первого текстового поля станет ложным... а следующий еще не установлен... Так что в этом случае ни у одного из этих текстовых полей нет фокуса... но второй скоро получит фокус.
В качестве обходного пути я пытаюсь использовать групповое поле..., чтобы проверить, имеет ли этот элемент управления фокус вместо проверки всех трех. Пожалуйста, скажите мне, если эта работа
1 ответ
Зачем вам нужно знать, есть ли у них Фокус или нет?
Focus - это функция View-Specific, поэтому я ожидаю, что ваши ViewModels не заботятся об этом.
Обычно, если я делаю что-то, основанное на элементе управления Focus, это делается для действия View-Specific, такого как DataTrigger, и в этом случае я использую code-behind или Trigger
Пример кода
if (tb1.IsFocused|| tb2.IsFocused || tb3.IsFocused)
{
DoSomething();
}
Пример триггера
<Style.Triggers>
<DataTrigger Binding="{Binding IsFocused, ElementName=tb1}" Value="True">
<Setter Property="BorderBrush" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding IsFocused, ElementName=tb2}" Value="True">
<Setter Property="BorderBrush" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding IsFocused, ElementName=tb3}" Value="True">
<Setter Property="BorderBrush" Value="Red" />
</DataTrigger>
</Style.Triggers>