2009-09-14 19 views
7

是否有任何標準方式將所有密鑰事件從控件A路由到其他控件B?我希望鍵盤焦點仍然在A上,但是A的事件處理程序會觸發B的所有事件處理程序來處理關鍵事件。將密鑰事件路由到其他控件

編輯:說明:調用我爲B寫的特定事件處理程序是不夠的。我需要模仿真實的事件。因此,例如,我希望如果一個密鑰被髮送到TextBox,它將被寫入TextBox。下面給出的解決方案沒有這樣做(更不用說事實上,如果新的事件處理程序被添加到B它完全失敗)。我知道,WPF區分邏輯焦點和鍵盤焦點,但我需要兩個焦點仍然在控制A,但在某些情況下,將其傳入的事件路由到其他控件。

+0

難道你不能只是讓你的關鍵事件控制嗎?做一些檢查,如果需要調用控制B的關鍵事件? – Relster 2009-09-14 12:38:08

+0

不!這不會觸發事件,它只會調用曾經與按鈕的單擊事件關聯的單個特定函數。我想模擬WPF發送的實際事件。 – 2009-09-14 21:01:36

+0

@Elazar - 查看我的編輯。 'RaiseEvent()'方法會起作用嗎? – Donut 2009-09-14 21:21:06

回答

4

難道你不能這樣做嗎?

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
    // Check if the event needs to be passed to button2's handler 
    if (conditionIsMet) 
    { 
     // Send the event to button2 
     button2.RaiseEvent(e); 
    } 
    else 
    { 
     // button1's "Click" code 
    } 
    } 

    private void button2_Click(object sender, RoutedEventArgs e) 
    { 
    // button2's "Click" code 
    } 

編輯:修改代碼以使用RaiseEvent()方法以編程方式發出一個特定的事件,而不是僅僅調用的事件處理程序button2

+0

不!這不會觸發事件,它只會調用曾經與按鈕的單擊事件關聯的單個特定函數。我想模擬WPF發送的實際事件。 – 2009-09-14 20:46:39

+0

這就是我一直在尋找的! – 2009-09-15 06:08:54

+0

我想知道爲什麼它被稱爲引發事件。我搜索火災事件並調用事件和觸發事件,但沒有結果... – 2009-09-15 06:09:55