透明背景下的鼠标事件

13

我创建了几个透明背景的画布并想在上面进行一些移动事件。

然而,我发现如果画布的背景是 Null 或 Transparent,则所有鼠标事件(例如 MouseLeftButtonDown)都无法正常工作。但是,如果我将背景设置为某种实色(比如红色或蓝色),则鼠标事件就能正常工作。

为什么会这样呢?

我可以使鼠标事件在透明背景下正常工作吗?

谢谢!

3个回答

32

我不确定您为什么会得到当前的结果,但是当背景透明时应该可以正常工作(即您通过XAML或代码显式地将其设置为Brushes.Transparent)。如果为null,WPF将不会在命中测试中包括它,因此它将无法参与鼠标事件。

请查看http://msdn.microsoft.com/en-us/library/ms752097.aspx透明的可视化对象也可以进行命中测试

最有可能的是,在Canvas接收到鼠标事件之前,您的元素树中有另一个UIElement正在捕获并处理鼠标事件(即通过将e.Handled设置为true来实现)。


13

Transparent能够响应鼠标事件,这正是它的全部意义所在,你确定你是否在点击画布吗?

这里有一个仅使用XAML的示例:

  <Border Width="300" Height="300" BorderBrush="Black" BorderThickness="1">
    <Canvas Background="Transparent">
        <Canvas.Triggers>
            <EventTrigger RoutedEvent="Canvas.MouseLeftButtonDown">
                <BeginStoryboard>
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Brushes.Red}"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Canvas.Triggers>
    </Canvas>
  </Border>
如果你将Background设置为null,不管是显式还是隐式地删除该属性,它都不再起作用。

9
请注意,将背景设置为透明与不设置(或将其设置为null)之间存在差异。我的经验是在透明背景上进行命中测试可以工作,但在没有背景或空背景上不能工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接