在透明背景的老鼠事件

use*_*434 10 wpf background transparent mouseevent

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

但是,我发现所有鼠标事件(例如MouseLeftButtonDown)都无法使用画布的背景功能为Null或Transparent.但是,如果我将背景设置为某种纯色(例如,红色或蓝色),则鼠标事件功能很好.

为什么?

我可以用透明背景使鼠标事件正常运行吗?

谢谢!

Isa*_*avo 28

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

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

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

  • 谢谢,解决方案的确是为我的StackPanel显式设置Background =“ Transparent”。 (2认同)

H.B*_*.B. 13

Transparent DOES会对鼠标事件做出反应,这就是它的全部意义,你确定你甚至还在击中画布吗?

这是一个仅限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>
Run Code Online (Sandbox Code Playgroud)

如果将Backgroundnull通过移除将不再发生反应的特性,无论是显式或隐式.


Arj*_*nbu 7

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