2009-06-06 7 views
2

Edit: Die ursprüngliche Prämisse der Frage falsch war, so die Frage überarbeitet:(WPF) Wie binden Sie auf einem Usercontrol zu IsMouseOver

Grundsätzlich möchte ich eine Schaltfläche nur dann sichtbar, wenn die Maus über ist das enthaltene Benutzersteuerelement. Hier ist die vereinfachte versin von dem, was ich habe:

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

Welche funktioniert, wenn die Maus über das Textfeld ist, aber nirgendwo sonst in der Benutzerkontrolle.

Antwort

6

Ich habe die Frage überarbeitet, als Thomas auf die falsche Annahme in meiner ursprünglichen Frage hinwies, die mich dazu brachte, den wahren Grund herauszufinden, warum es in this post nicht funktionierte.

Grundsätzlich hat das Benutzersteuerelement einen Null-Hintergrund (im Gegensatz zu transparent), der es für die Maus scheinbar unsichtbar macht, selbst wenn IsHitTestVisible auf true festgelegt ist, also die Lösung Hintergrund = "Transparent" zum Benutzersteuerelement hinzuzufügen.

+0

Vielen Dank ... Ich habe versucht herauszufinden, warum eine der IsMouseOver-Eigenschaften meines Rahmens falsch war, selbst wenn die Maus DIREKT ÜBERGEWÄHLT war. Sehr frustrierend um das herauszufinden, aber es macht jetzt so viel Sinn ... :) – Siege

1

Sie könnten diese Eigenschaft in einer abgeleiteten Klasse implementieren. Ich musste das schon mal machen.

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

Ich erkannte, dass Usercontrol hat keine IsMouseOver Eigenschaft

Aber es tut ... IsMouseOver ist in der UIElement-Klasse definiert, von dem Usercontrol (indirekt) erbt

+0

Danke für das Hinweis auf meine fehlerhafte Annahme, da eine Google-Suche nach wpf ismouseover nur das IInputElement auf MSDN zurückgegeben. Die UIElement-Version ist nicht einmal auf den ersten 2 Seiten. – Davy8

Verwandte Themen