7

ElementHost内でWPFコントロール(重要な場合はAvalon Edit)を使用しているWinformsアプリケーションがあります。

正常に動作しているようですが、このコントロールの KeyPress イベントを Winforms の方法で (RoutedCommands と InputGestures を使用せずに) 処理できるようにしたいので、KeyPreview を設定してフォームの KeyDown イベントを処理することもできましたが、WPF イベントはフォームに泡立たないようです。

基本的に、Winforms の方法で WPF コントロールの KeyDown イベントにアクセスするにはどうすればよいでしょうか?

4

1 に答える 1

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 is System.Windows.Input.KeyEventArgs) Ctrl、Alt などに関する情報を保存します。

于 2010-12-04T01:46:29.373 に答える