2010-12-03 7 views
7

私は、ElementHostの内部でWPFコントロール(問題があればAvalon Edit)を使用しているWinformsアプリケーションを持っています。WinformsのWPFイベント

正常に動作しているようですが、KeyPreviewを使用してフォームのKeyDownイベントを処理することはできますが、Winforms(RoutedCommandsおよびInputGesturesを使用しない)でこのコントロールのKeyPressイベントを処理できるようにしたいと思います。 WPFイベントはフォームにバブルしないようです。

基本的に、どのようにWinFormsの方法でWPFコントロールのKeyDownイベントにアクセスできますか?

答えて

6

WinFormのKeyDownに接続するのではなく、WpfControl自体のカスタムイベントハンドラを追加しようとすることができます。

ここは例です。たとえば、WinFormのタイプがForm1、WpfControlがUserControl1、WpfControlの要素ホストが呼び出されています(これは推測されません)。 - elementHost。

public Form1() 
{ 
    InitializeComponent(); 
    elementHost.ChildChanged += ElementHost_ChildChanged; 
} 

private void ElementHost_ChildChanged(object sender, ChildChangedEventArgs e) 
{ 
    var ctr = (elementHost.Child as UserControl1); 
    if (ctr == null) 
     return; 
    ctr.KeyDown += ctr_KeyDown; 
} 

void ctr_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) 
{ 
    /* your custom handling for key-presses */ 
} 

UPD:e.KeyboardDevice.Modifiers(eはSystem.Windows.Input.KeyEventArgsある)Ctrlキー、Altキーに関する情報を格納し、など

+0

問題はSystem.Windows.Input.KeyEventArgsが実際に修飾キーを公開していないので、あなたができることです'Ctrl + Z'、 'Z'または 'Ctrl'のみをチェックしてください。 Keyプロパティであっても、私が見たものからのmodifierとkeyのビット単位の組み合わせではありません。 – Miguel

+0

@Miguel、更新情報:e.KeyboardDevice.Modifiersが必要です。 –

+0

ああ、ありがとう、私はそれを働いたことはないだろう。 Upvoted。 – Miguel

関連する問題