语境:
有一个应用程序可以在画布上绘制东西。例如,用户点击的地方有一个黑点。但是在主窗口代码的事件处理程序中处理画布引发的事件对我来说很丑陋。所以我写了一个类,它的方法镜像画布鼠标事件,我在事件处理程序中调用这些方法。
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 中引发并在内部处理。这种方法适用于绘图功能(绘制完成后,将绘制的对象添加到画布子级并从 DrawingTool 子级中删除),但是当涉及到选择模式或其他模式时,例如元素的命中测试会出现问题。
因此,我将不胜感激任何建议如何解决我的问题或解释为什么这是一个愚蠢的想法:)