RoutedEvent(MouseUp)起泡不适用于Canvas的子代(形状)

时间:2018-11-01 16:20:11

标签: c# wpf xaml events canvas

我正在使用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的所有处理程序。有两种解决方法:

  • 将形状的IsHistTestVisible设置为false。但是我需要它们具有IsHitTestVisible == true。
  • 在Canvas MouseMove事件中检测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不会升高。

Edit2

Canvas.Children.Add(shape)形状之后,“父级”仍为null。并且无法设置其父级。

enter image description here

编辑3

MouseDown正确冒泡。

0 个答案:

没有答案