我创建了几个透明背景的画布并想在上面进行一些移动事件。
然而,我发现如果画布的背景是 Null 或 Transparent,则所有鼠标事件(例如 MouseLeftButtonDown)都无法正常工作。但是,如果我将背景设置为某种实色(比如红色或蓝色),则鼠标事件就能正常工作。
为什么会这样呢?
我可以使鼠标事件在透明背景下正常工作吗?
谢谢!
我创建了几个透明背景的画布并想在上面进行一些移动事件。
然而,我发现如果画布的背景是 Null 或 Transparent,则所有鼠标事件(例如 MouseLeftButtonDown)都无法正常工作。但是,如果我将背景设置为某种实色(比如红色或蓝色),则鼠标事件就能正常工作。
为什么会这样呢?
我可以使鼠标事件在透明背景下正常工作吗?
谢谢!
我不确定您为什么会得到当前的结果,但是当背景透明时应该可以正常工作(即您通过XAML或代码显式地将其设置为Brushes.Transparent)。如果为null,WPF将不会在命中测试中包括它,因此它将无法参与鼠标事件。
请查看http://msdn.microsoft.com/en-us/library/ms752097.aspx(透明的可视化对象也可以进行命中测试)
最有可能的是,在Canvas接收到鼠标事件之前,您的元素树中有另一个UIElement正在捕获并处理鼠标事件(即通过将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
,不管是显式还是隐式地删除该属性,它都不再起作用。