0

语境:

有一个应用程序可以在画布上绘制东西。例如,用户点击的地方有一个黑点。但是在主窗口代码的事件处理程序中处理画布引发的事件对我来说很丑陋。所以我写了一个类,它的方法镜像画布鼠标事件,我在事件处理程序中调用这些方法。

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 子级中删除),但是当涉及到选择模式或其他模式时,例如元素的命中测试会出现问题。

因此,我将不胜感激任何建议如何解决我的问题或解释为什么这是一个愚蠢的想法:)

4

2 回答 2

1

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

Window1.DrawingCanvas.MouseLeftButtonDown += YourHandlerMethod;
于 2009-07-03T06:23:02.937 回答
0

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

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

于 2009-07-03T06:48:37.653 回答