Ismouseover возвращает false, когда через контекстуменную или ошибку валидации?

StackOverflow https://stackoverflow.com/questions/3788514

  •  05-10-2019
  •  | 
  •  

Вопрос

У меня есть контроль, который расширяется, когда Ismouseover установлен в True с помощью триггера. В этом контроле есть несколько текстовых ящиков, которые имеют некоторую базовую проверку. Моя проблема в том, что когда возникает ошибка проверки, и пользовательские мыши на красной границе вокруг текстового ящика (почти Guarenteed произойдут как пользователь перемещает мышь в центр текстовых коробок для изменения значения), ISMOUSEOVER устанавливается на ложь, и контроль закрывается Отказ

Ошибка проверки для текстовых коробок:

<Style TargetType="{x:Type TextBox}">
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="ToolTip" Value="{Binding 
                Path=(Validation.Errors)[0].ErrorContent, 
                RelativeSource={x:Static RelativeSource.Self}}" />
        </Trigger>
    </Style.Triggers>
</Style>

Триггер, чтобы показать управление:

<DataTrigger Binding="{Binding ElementName=TabControl_TabPanel, Path=IsMouseOver}" Value="True">
    <Setter Property="Visibility" Value="Visible" />
</DataTrigger>

ОБНОВИТЬ:Ismouseover также устанавливается на false, когда щелкните правой кнопкой мыши текстовое поле и откройте контекстное меню

Это было полезно?

Решение

В случае контекстного меню все довольно ясно: это другое окно (на низком уровне), поэтому ваш контроль не может обнаружить что-либо «хотя». Аналогичным образом, ошибки валидации в WPF отображаются сложными и запутанными способом, и достаточно сказать, что они также не являются частью вашего контроля.

Я бы предложил использовать фокусные события для вашего сценария; Является ли мышь на самом деле требуется? Могут быть некоторые способы сделать это работать хотя ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top