我正在使用WPF制作一个简单的类似于绘画的应用程序。我有一个上面有形状的画布。我想实现选择feautre。我单击并拖动一个必须在Canvas MouseUp事件上消失的矩形区域。但是,如果将光标置于矩形(或其中一个Shapes)上,则出于某些原因,不会触发Canvas的MouseUp事件。
我阅读了这篇this文章,其中描述了路由事件的工作方式。 MouseUp是路由事件,RoutedStrategy等于Bubble。正如我所读到的,这意味着Canvas的子级将在未自行处理事件的情况下触发Canvas MouseUp事件处理程序(e.Handled未设置为true
)。
我在Internet上阅读了很多内容,但没有找到关于我的问题的任何解决方案/说明。画布MouseUp不会触发。
已设置背景。 IsHitTestVisible为true。我尝试了canvas.AddHandler(Shape.MouseUpEvent, new MouseButtonEventHandler(OnCanvasMouseUp), true);
。我尝试使用PreviewMouseUp以及特定MouseButton的所有处理程序。有两种解决方法:
有什么方法可以使一切正常运行(根据MS关于RoutedEvents的文章)?为什么它没有按预期工作?有什么办法可以通过编程将事件冒泡给父对象?
画布:
<Canvas x:Name="MainCanvas" Grid.Column="1" Background="White"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ClipToBounds="True" IsHitTestVisible="True" >
</Canvas>
添加一些事件处理程序:
canvas.MouseUp += OnCanvasMouseUp;
canvas.PreviewMouseUp += OnCanvasMouseUp;
canvas.AddHandler(Shape.MouseUpEvent, new MouseButtonEventHandler(OnCanvasMouseUp), true);
canvas.AddHandler(Shape.MouseLeftButtonUpEvent, new MouseButtonEventHandler(OnCanvasMouseUp), true);
canvas.AddHandler(Shape.PreviewMouseUpEvent, new MouseButtonEventHandler(OnCanvasMouseUp), false);
canvas.MouseLeftButtonUp += OnCanvasMouseUp;
形状是这样添加到“画布”的:
Canvas.Children.Add(figure);
这里是一个例子。当我在圆圈内或其边界上释放鼠标按钮时,Canvas.MouseUp不会升高。
在Canvas.Children.Add(shape)
形状之后,“父级”仍为null。并且无法设置其父级。
MouseDown正确冒泡。