语境:
有一个应用程序可以在画布上绘制东西。例如,用户单击的地方有一个黑点。但是在主窗口代码中,在事件处理程序中处理画布引发的事件对我来说是很难看的。所以我编写了一个类,该类的方法镜像画布鼠标事件,并在事件处理程序中调用这些方法。
public partial class Window1 : Window
{
DrawingTool drawTool = new DrawingTool();
public Window1()
{
InitializeComponent();
}
private void drawingCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
drawTool.OnMouseLeftButtonDown(e);
}
}
很好,但我想要更多…
问题:
是否可以直接处理DrawingTools类中Canvas引发的事件,而无需定义Canvas事件处理程序。我想保持我的window1代码干净,专注于窗口的东西,并将事件处理完全转移到我的类中。
我考虑过从frameworkelement派生drawingtool,重写onrender并在画布上透明地绘制它,这样用户的单击似乎是在画布上进行的,但实际上会在drawingtool中提升并在内部处理。此方法适用于绘图功能(绘图完成后,将绘制对象添加到画布子级,并从绘图工具子级中删除),但当涉及选择模式或其他模式时,例如,元素的命中测试存在问题。
因此,我将感谢任何关于如何解决我的问题或解释为什么这是一个愚蠢的想法的建议:)