2009-06-06 12 views
2

Edit: La prémisse originale de la question était incorrecte et a révisé la question:(WPF) Comment vous liez à IsMouseOver sur un usercontrol

Fondamentalement, je veux un bouton pour être visible que lorsque la souris est sur le contrôle utilisateur contenant. Voici la versin simplifiée de ce que j'ai:

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Class="MyNamespace.MyUserControl" 
    x:Name="myUserControl"> 
    <Textbox>Some Text</Textbox> 
    <Button Visibility="{Binding ElementName=myUserControl, Path=IsMouseOver, Converter={StaticResource mouseOverVisibilityConverter}}" /> 
</UserControl> 

qui fonctionne si la souris est sur la zone de texte, mais nulle part ailleurs dans le contrôle de l'utilisateur.

Répondre

6

J'ai révisé la question une fois que Thomas a souligné la fausse hypothèse dans ma question initiale qui m'a amené à découvrir la vraie raison pour laquelle il ne fonctionnait pas en this post. Fondamentalement, le contrôle utilisateur a un arrière-plan nul (par opposition à transparent) qui le rend apparemment invisible à la souris, même avec IsHitTestVisible défini sur true, donc la solution était d'ajouter Background = "Transparent" au contrôle utilisateur.

+0

Merci ... J'essayais de comprendre pourquoi l'une des propriétés IsMouseOver de ma frontière était fausse, même lorsque la souris était DIRECTEMENT terminée. Très frustrant de comprendre, mais c'est tellement logique maintenant ... :) – Siege

1

Vous pouvez implémenter cette propriété dans une classe dérivée. J'ai dû faire ce genre de chose avant.

Private _IsMouseOver As Boolean = False 

Protected Overrides Sub OnMouseEnter(ByVal sender As Object, ByVal e As MouseEventArgs) 
    _IsMouseOver = True 
    MyBase.OnMouseEnter(sender, e) 
End Sub 

Protected Overrides Sub OnMouseLeave(ByVal sender As Object, ByVal e As MouseEventArgs) 
    _IsMouseOver = False 
    MyBase.OnMouseLeave(sender, e) 
End Sub 

Public ReadOnly Property IsMouseOver As Boolean() 
    Get 
     Return _IsMouseOver 
    End Get 
End Property 
2

réalisé que je ne UserControl pas une propriété IsMouseOver

Mais elle ... IsMouseOver est défini dans la classe UIElement, dont UserControl (indirectement) hérite

+0

Merci d'avoir signalé mon hypothèse erronée, car une recherche google pour wpf ismouseover n'a retourné que le IInputElement sur msdn. La version UIElement n'est même pas sur les 2 premières pages. – Davy8