2011-08-11 87 views
0

這是我的第一個問題,所以請去容易:)WPF隧道一個Button_Click

我是新來WPF和基於桌面的應用程序和我學習事件處理。通過Bubbling和Tunneling我無法找到解釋如何在Button_Click上使用隧道的任何地方的示例。

基本上,當我點擊一個按鈕時,我需要父控件(在這種情況下是一個網格)來首先處理事件,並在允許Button_Click發生之前執行一些檢查。我遇到的問題是我可以使用Grid_PreviewMouseDown捕獲事件,但這是不明確的!它沒有告訴我(至少我認爲它沒有)什麼控制導致處理程序觸發。

我能做些什麼來確定PreviewMouseDown是由按鈕點擊觸發的?或者: 有沒有其他的/更好的方法來挖掘Button_Click?

感謝

回答

1

在你的處理器,你應該檢查事件的Source得到其啓動它的控制。請注意,它不是隻讀的,可以更改,因此Source指向不同的控件。

您可能有更好的運氣註冊PreviewMouseLeftButtonDown事件來獲得左鍵點擊,而不是任何點擊。

如果您的處理程序是指只認準點擊鼠標左鍵,你可以使用此代碼:

private void Grid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    Button button = e.Source as Button; 
    if (button != null) 
    { 
     // button is being clicked, handle it 
    } 
} 
+0

還要注意的是'MouseDown'是不是一個正確的點擊... –

+0

在代碼:怎麼會我檢查源是一個Button?投? –

+0

@Mrs:這取決於你的情況。如果您的處理程序將專門處理按鈕點擊,那麼我更新的代碼將會很好。否則,如果您的處理程序將處理其他控制點擊,則使用「is」進行檢查可能會更容易。 –