繁体   English   中英

WPF-如何处理引发该事件的组件之外的鼠标事件?

[英]WPF - how to handle mouse events outside component which raised that event?

内容:

有一个应用程序可以在画布上绘制东西。 例如,用户单击的地方有一个黑点。 但是,在主窗口代码中的事件处理程序中处理由画布引发的事件对我来说是很难的。 因此,我编写了一个类,其方法可反映画布鼠标事件,并在事件处理程序中调用这些方法。

public partial class Window1 : Window
{
    DrawingTool drawTool = new DrawingTool();
    public Window1()
    {
        InitializeComponent();            
    }

    private void drawingCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        drawTool.OnMouseLeftButtonDown(e);
    }
}

很好,但我想要更多...

题:

是否可以直接在我的DrawingTool类中处理画布引发的事件,而无需定义画布事件处理程序。 我想保持我的Window1代码整洁,并专注于窗口内容,并将事件处理完全移到类中。

我考虑过从FrameworkElement派生DrawingTool,重写OnRender并将其透明地绘制在画布上,因此用户的单击似乎是在画布上进行的,但实际上会在DrawingTool中引发并在内部进行处理。 这种方法适用于绘图功能(完成绘图后,将绘制的对象添加到canvas子级并从DrawingTool子级中删除),但是当涉及到选择模式或其他模式时,例如,元素的点击测试就会出现问题。

因此,对于任何如何解决我的问题或解释为什么这是一个愚蠢的主意的建议,我将不胜感激。

只需将私有控件字段公开为公共属性,当您拥有Window1的实例时,就可以

Window1.DrawingCanvas.MouseLeftButtonDown += YourHandlerMethod;

我不确定我的问题是否正确,我只玩过WPF,但是如何创建一个包含画布的用户控件并在那里处理鼠标和绘图呢? 这可以命名为DrawingControl或类似名称。

这样,您就可以在代表控件的类中包含绘图代码。 您可能想给新用户控件一个属性,该属性允许访问“内部”画布。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM