捕获鼠标事件
问题描述:
我有一个这样的网格:捕获鼠标事件
<Grid>
<WrapPanel Name="wrap1"/>
<Canvas Name="canvas1" Background="LightGray" Opacity="0.5"/>
</Grid>
而且我希望能够:
- 捕获点击事件为WrapPanel按钮
- 捕获的MouseLeftButtonDown,的MouseLeftButtonUp ,鼠标移动事件帆布
WrapPanel按钮PreviewMouseLeftButtonDown和Click不起作用。将Canvas放入Canvas内部的WrapPanel或WrapPanel也不起作用。
答
您的WrapPanel和Canvas不在VisualTree中的父/子关系中。 WrapPanel不包含Canvas,所以鼠标事件不会冒泡。您需要在WrapPanel中包含Canvas,然后这两个事件都可以使用。
编辑:
这是我的代码触发这两个事件(I也势必我的帆布宽度/高度与含WrapPanel因此将填充面板):
<WrapPanel Name="wrap1" MouseLeftButtonDown="wrap1_MouseLeftButtonDown">
<Canvas Name="canvas1"
Width="{Binding ElementName=wrap1, Path=ActualWidth}"
Height="{Binding ElementName=wrap1, Path=ActualHeight}"
Background="LightGray" Opacity="0.5"
MouseLeftButtonDown="canvas1_MouseLeftButtonDown"/>
</WrapPanel>
Remeber该预览事件在VisualTree中自顶向下,其中非预览事件是自下而上的,所以如果使用预览事件,则WrapPanel事件将首先触发,但此代码将首先触发Canvas事件。
如果我这样做画布,不要获得任何鼠标输入。 – Cobold
我测试了这个,它工作正常,你需要确保你的画布有一个大小设置,因为deafult它不会strech来填充WrapPanel。 –