Ismouseover возвращает false, когда через контекстуменную или ошибку валидации?
-
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 отображаются сложными и запутанными способом, и достаточно сказать, что они также не являются частью вашего контроля.
Я бы предложил использовать фокусные события для вашего сценария; Является ли мышь на самом деле требуется? Могут быть некоторые способы сделать это работать хотя ...