代码之家  ›  专栏  ›  技术社区  ›  Davy8

(wpf)如何绑定到用户控件上的IsMouseOver

  •  2
  • Davy8  · 技术社区  · 15 年前

    编辑:问题的原始前提不正确,因此修改了问题:

    基本上,我希望只有当鼠标位于包含用户控件的上方时,按钮才可见。以下是我所拥有的简化版本:

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

    如果鼠标悬停在文本框上,但不在用户控件中的任何其他位置,则可以使用。

    3 回复  |  直到 15 年前
        1
  •  6
  •   Davy8    15 年前

    当托马斯指出我原来问题中的错误假设时,我修改了这个问题,这使我发现了它不起作用的真正原因。 this post .

    基本上,用户控件有一个空背景(与透明背景相反),这显然使它对鼠标不可见,即使isHittestVisible设置为true,所以解决方案是向用户控件添加background=“transparent”。

        2
  •  2
  •   Thomas Levesque    15 年前

    我意识到用户控件没有IsMouseOver属性

    但它确实…ismouseover是在uielement类中定义的,用户控件(间接)从该类继承

        3
  •  1
  •   Joshua    15 年前

    可以在派生类中实现该属性。我以前不得不做这种事。

    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