IsMouseOver возвращает значение False при превышении ContextMenu или ошибке проверки? - PullRequest
3 голосов
/ 24 сентября 2010

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

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

<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>

UPDATE: IsMouseOver также получает значение False, когда я щелкаю правой кнопкой мыши текстовое поле и открываю контекстное меню

1 Ответ

0 голосов
/ 25 сентября 2010

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

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

...