透明背景上的鼠标事件
问题描述:
我已经创建了几个带有透明背景的画布,并且想对它做一些移动事件。透明背景上的鼠标事件
但是,我发现所有鼠标事件(例如MouseLeftButtonDown)都无法使用canvas的背景为Null或Transparent。但是,如果我将背景设置为某种纯色(例如,红色或蓝色),则鼠标事件功能良好。
为什么?
我可以使用透明背景正确设置鼠标事件功能吗?
谢谢!
答
我不确定为什么你会得到你得到的结果,但是当背景透明时(即你明确地将它设置为Brushes.Transparent,通过XAML或代码)它应该可以正常工作。如果它为null,那么WPF将不会将它包含在命中测试中,因此它将不符合鼠标事件的条件。
参见例如http://msdn.microsoft.com/en-us/library/ms752097.aspx(视觉对象,它是透明的,也可以点击测试。)
很可能是因为其他的UIElement的是你的画布前捕捉and handling鼠标事件的元素树看到它(通过设置e.Handled即到true
)
答
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
,无论是显式或隐式。
答
请注意,将背景设置为透明而不是将其设置为透明(或将其设置为空)不同。我的经验是,命中测试是透明的,而不是空背景。
谢谢,解决方案的确是为我的StackPanel显式设置Background =“Transparent”。 – Borzh