2010-09-24 2 views
3

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

Ошибка проверки для Textboxes:

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

Trigger, чтобы показать контроль:

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

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

ответ

0

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

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

+0

Я предполагаю, что это было что-то еще ... Элемент управления - это «скользящая» панель, где вкладка находится на краю экрана и наводите на нее курсор заставляет элемент управления выдвигаться и отображать его содержимое. Наверное, я посмотрю, смогу ли я найти альтернативный способ собрать его вместе. – Rachel

+0

Я переработал код, чтобы установить видимость на основе MouseEnter/MouseLeave. В событии MouseLeave, который я проверил, чтобы проверить, находилась ли позиция мыши по границам элемента управления и оставила элемент управления видимым, если это было. – Rachel