2010-09-24 31 views
3

J'ai un contrôle qui se développe lorsque IsMouseOver est défini sur true à l'aide d'un déclencheur. Dans ce contrôle, il y a quelques zones de texte qui ont une validation de base. Mon problème est que lorsqu'une erreur de validation survient et que l'utilisateur survole la bordure rouge autour de la zone de texte (presque garantie que l'utilisateur déplace la souris au centre de la zone de texte pour changer la valeur), IsMouseOver est défini sur false et le contrôle se ferme .IsMouseOver retournant False lors d'un ContextMenu ou d'une erreur de validation?

erreur de validation pour Encadrés:

<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 pour montrer le contrôle:

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

MISE À JOUR: IsMouseOver est également se définie sur False quand je clic droit sur une zone de texte et ouvre la menu contextuel

Répondre

0

Dans le cas du menu contextuel, les choses sont claires: c'est différent fenêtre (à un niveau bas), de sorte que votre contrôle ne peut pas détecter quoi que ce soit «bien». De même, les erreurs de validation dans WPF sont affichées de manière compliquée et alambiquée, et il suffit de dire qu'elles ne font pas vraiment partie de votre contrôle non plus.

Je suggérerais d'utiliser des événements de mise au point pour votre scénario; est-ce que la souris est vraiment nécessaire? Il peut y avoir quelques façons de le faire fonctionner ...

+0

Je suppose que c'était quelque chose d'autre .... Le contrôle est un panneau "coulissant" où la languette est sur le bord de l'écran et déplace votre souris dessus fait glisser le contrôle et affiche son contenu. Je suppose que je vais voir si je peux trouver une autre façon de le mettre ensemble. – Rachel

+0

J'ai retravaillé le code pour définir la visibilité en fonction de MouseEnter/MouseLeave. Dans l'événement MouseLeave j'ai vérifié pour voir si la position de la souris était toujours dans les limites du contrôle et laissé le contrôle visible si c'était le cas. – Rachel