如果我们有
<ScrollViewer Name="scroll_viewer" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Canvas Name="canvas" Height="200" Width="200">
<Rectangle Fill="AliceBlue" Width="100" Height="100"/>
</Canvas>
</ScrollViewer>
处理程序:
scroll_viewer.PreviewMouseLeftButtonDown
scroll_viewer.MouseLeftButtonDown
canvas.PreviewMouseLeftButtonDown
然后,如果我们单击 Rectangle,我们scroll_viewer_PreviewMouseLeftButtonDown
首先会被调用,canvas_PreviewMouseLeftButtonDown
但scroll_viewer_MouseLeftButtonDown
不会被调用。
我想首先在画布中处理单击事件 - 如果单击一个对象,我想处理该事件(用于对象拖动)。如果没有单击画布对象,我想处理 scroll_viewer 中的事件(以管理使用鼠标进行滚动视图平移)。鉴于调用顺序与我想要的相反并且未调用
非 perview 版本,如何管理这一点?scroll_viewer.MouseLeftButtonDown
更新:
来自这篇文章:Silverlight 论坛
((FrameworkElement)scroll_viewer.GetValue(ScrollViewer.ContentProperty)).MouseLeftButtonDown += scroll_viewer_MouseLeftButtonDown;
确实有效,即在预览事件之后确实被调用 - 有人可以解释为什么需要这种不太明显的语法吗?