Как проверить, что любой из трех элементов управления имеет фокус одновременно в wpf? - PullRequest
2 голосов
/ 14 ноября 2011

У меня есть три текстовых поля ... и я хотел проверить, фокусируется ли какой-либо из этих трех элементов.

Я пробовал что-то вроде этого -> добавил три свойства в viewmodel ..., значение которого будетбыть переключенным потерянными / полученными событиями фокуса.(Я сделал это через прикрепленные свойства).Но в этом случае ... если я переместлю фук из одного текстового поля в следующее ... фокус первого текстового поля станет ложным ... а следующий еще не установлен ... Так что в этом случае ни у одного из этих текстовых полей нет фокуса ...но второй скоро получит фокус.

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

1 Ответ

10 голосов
/ 14 ноября 2011

Зачем вам нужно знать, есть ли у них Фокус или нет?

Фокус - это функция для конкретного вида, поэтому я ожидаю, что ваши ViewModels не будут об этом заботиться.

Обычно, если я делаю что-то, основанное на элементе управления Focus, это делается для действия для конкретного вида, такого как DataTrigger, и в этом случае я использую код позади или триггерный код

позадипример

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...