2009-07-03 185 views
0

上下文:WPF - 如何处理引发该事件的组件外的鼠标事件?

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

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子项中移除),但是当涉及到选择模式或其他元素时,例如对元素的命中测试存在问题。

所以,我会感谢任何建议如何解决我的问题或解释为什么这是一个愚蠢的想法在所有:)

回答

1

就暴露私人控制领域的公共属性,当你有一个实例窗口1,你可以做

Window1.DrawingCanvas.MouseLeftButtonDown += YourHandlerMethod; 
+0

这是非常简单的解决方案,我没有考虑它。我正在寻找放置在风格或一些聪明的代表伏都教的事件制定者,但像往常一样,奥恰姆的剃刀派上用场了:) Thx。 – grapkulec 2009-07-03 06:48:01

0

我不知道我是否有你的问题吧,我也只能用WPF一点点出场,但如何创建一个包含你的画布上的用户控制和处理鼠标和绘图?这可以被命名为DrawingControl或类似的。

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

+0

如果我想制作自己的绘图控件,那将是这种方式,但我不会:) – grapkulec 2009-07-03 06:59:36