(WPF)如何在用户控件上绑定到IsMouseOver

时间:2009-06-06 15:44:33

标签: wpf data-binding user-controls mouseover

编辑:问题的原始前提是不正确的,所以修改了问题:

基本上我希望只有当鼠标位于包含的用户控件上时才能看到一个按钮。以下是我所拥有的简化版本:

<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 个答案:

答案 0 :(得分:6)

一旦托马斯在我的原始问题中指出了错误的假设,这导致我发现它在this post中无效的真正原因,我就修改了这个问题。

基本上用户控件具有空背景(而不是透明),这显然使鼠标不可见,即使IsHitTestVisible设置为true,因此解决方案是将Background =“Transparent”添加到用户控件。 / p>

答案 1 :(得分:2)

  

我意识到UserControl没有IsMouseOver属性

但确实...... IsMouseOver是在UIElement类中定义的,UserControl(间接地)从该类继承

答案 2 :(得分:1)

您可以在派生类中实现该属性。我以前必须做这件事。

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