(WPF) Wie binden Sie IsMouseOver auf einem Usercontrol
-
12-09-2019 - |
Frage
Edit: Die ursprüngliche Prämisse der Frage war falsch, so die Frage überarbeitet:
Grundsätzlich möchte ich eine Schaltfläche nur dann sichtbar sein, wenn die Maus über die mit Benutzersteuerung ist. 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.
Lösung
ich die Frage überarbeitete einmal Thomas die falsche Annahme in meiner ursprünglichen Frage wies darauf hin, das mich führen, den wahren Grund zu entdecken, es funktioniert nicht in dieser Beitrag .
Grundsätzlich ist die Benutzersteuerung hat einen Null-Hintergrund (im Gegensatz zu transparent gegen), die offensichtlich macht es auf die Maus unsichtbar, auch mit IsHitTestVisible Satz wahr ist, so war die Lösung Hintergrund hinzufügen = „Transparent“, um die Benutzersteuerung.
Andere Tipps
Ich erkennen, dass Usercontrol nicht über eine IsMouseOver Eigenschaft
Aber es ist ... IsMouseOver in der UIElement-Klasse definiert, von dem Usercontrol (indirekt) erbt
Sie können diese Eigenschaft in einer abgeleiteten Klasse implementieren. Ich habe vor, diese Art der Sache zu tun.
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