2009-07-03 186 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