Как проверить, что любой из трех элементов управления имеет фокус одновременно в 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>
Другие вопросы по тегам