2009-09-14 5 views
7

コントロールAからすべてのキーイベントを他のコントロールBにルーティングする標準的な方法はありますか?私は、キーボードのフォーカスがまだAにあることを願っていますが、Aのイベントハンドラは、キーイベントに対してBのすべてのイベントハンドラをトリガします。他のコントロールへのキーイベントのルーティング

編集:明確化:私がBのために書いた特定のイベントハンドラを呼び出すだけでは不十分です。私は実際のイベントを模倣する必要があります。たとえば、キーがTextBoxに送信された場合は、TextBoxに書き込まれます。以下の解決策はそれを行いません(新しいイベントハンドラがBに追加されても完全に失敗するという事実は言及しません)。

WPFは論理フォーカスとキーボードフォーカスを区別していますが、私はコントロールAのままにしておく必要がありますが、場合によっては受信イベントを他のコントロールにルーティングする必要があります。

+0

コントロールAのキーイベントを作成するだけでは、何らかのチェックを行い、必要に応じてコントロールBのキーイベントを呼び出すことはできませんか? – Relster

+0

いいえ!それはイベントを引き起こさないでしょう。これは、以前はボタンのクリックイベントに関連付けられていた特定の単一の関数を呼び出すだけでした。 WPFが送信する実際のイベントをシミュレートします。 –

+0

@Elazar - 私の編集を参照してください。 'RaiseEvent()'メソッドは代わりに機能するでしょうか? – Donut

答えて

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 
    } 

編集:変更されたコードは、プログラムというだけでbutton2のイベントハンドラを呼び出すよりも、特定のイベントを発生させるRaiseEvent()メソッドを使用します。

+0

いいえ!それはイベントを引き起こさないでしょう。これは、以前はボタンのクリックイベントに関連付けられていた特定の単一の関数を呼び出すだけでした。 WPFが送信する実際のイベントをシミュレートします。 –

+0

それは私が探していたものです! –

+0

なぜイベントを発生させるのだろうと思います。私は火事のイベントのためのグーグルとイベントを起動し、イベントをトリガしますが、結果はありません... –

関連する問題