首页 > 解决方案 > RoutedEvent(MouseUp)冒泡不适用于Canvas的儿童(形状)

问题描述

我正在使用 WPF 制作一个简单的类似绘画的应用程序。我有一个上面有形状的画布。我想实现选择功能。我单击并拖动必须在 Canvas MouseUp 事件上消失的矩形区域。但是,如果光标位于矩形(或其中一个形状)上,则 Canvas 的 MouseUp 事件由于某种原因不会触发。

我读了这篇描述路由事件如何工作的文章。MouseUp 是路由事件,RoutedStrategy 等于 Bubble。正如我所读到的,这意味着如果 Canvas 的子级没有自己处理事件(e.Handled 未设置为true),他们将触发 Canvas MouseUp 事件处理程序。

我在互联网上阅读了大量的所有内容,但没有找到任何解决方案\解释我的问题。Canvas MouseUp 只是不会触发。

背景设置好了。IsHitTestVisible 是真的。我试过了canvas.AddHandler(Shape.MouseUpEvent, new MouseButtonEventHandler(OnCanvasMouseUp), true);。我尝试使用 PreviewMouseUp 以及特定 MouseButton 的所有处理程序。有两种解决方法:

有没有办法让一切都按它应该的那样工作(根据关于 RoutedEvents 的 MS 文章)?为什么它没有按预期工作?有没有办法以编程方式将事件冒泡给父母?

帆布:

<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 不会升起。

编辑2

Canvas.Children.Add(shape)形状仍然有 Parent 等于 null.. 并且没有办法设置它的父级之后。

在此处输入图像描述

编辑 3

MouseDown 正确地冒泡。

标签: c#wpfxamleventscanvas

解决方案


推荐阅读