在透明背景的老鼠事件

时间:2011-11-03 07:10:11

标签: wpf background mouseevent transparent

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

但是,我发现所有鼠标事件(例如MouseLeftButtonDown)都无法使用画布的背景功能为Null或Transparent。但是,如果我将背景设置为某种纯色(例如,红色或蓝色),鼠标事件就可以正常运行。

为什么?

我可以使用透明背景正确启用鼠标事件吗?

谢谢!

3 个答案:

答案 0 :(得分:27)

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

参见例如http://msdn.microsoft.com/en-us/library/ms752097.aspx透明的视觉对象也可以进行测试。

很可能你的元素树中有另一个UIElement在画布看到它之前捕获and handling鼠标事件(即通过将e.Handled设置为true

答案 1 :(得分: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,无论是明确的还是隐式删除属性,它都将不再作出反应。

答案 2 :(得分:7)

请注意,将背景设置为透明与将其设置为透明(或将其设置为null)不同。我的经验是,命中测试适用于透明,但不适用于空背景。