我创建了几个透明背景的画布,想在上面做一些移动事件。
但是,我发现所有鼠标事件(例如MouseLeftButtonDown)都无法使用画布的背景功能为Null或Transparent。但是,如果我将背景设置为某种纯色(例如,红色或蓝色),鼠标事件就可以正常运行。
为什么?
我可以使用透明背景正确启用鼠标事件吗?
谢谢!
答案 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)不同。我的经验是,命中测试适用于透明,但不适用于空背景。