7

我有一个 Winforms 应用程序,该应用程序在 ElementHost 内使用 WPF 控件(如果重要,则为 Avalon Edit)。

它似乎工作正常,但我希望能够以 Winforms 方式处理此控件的 KeyPress 事件(没有 RoutedCommands 和 InputGestures),所以我虽然可以只处理设置了 KeyPreview 的 Form 的 KeyDown 事件,但是 WPF 事件似乎没有冒泡到表格。

所以基本上,如何以 Winforms 方式访问 WPF 控件上的 KeyDown 事件?

4

1 回答 1

6

您可以尝试为 WpfControl 本身添加自定义事件处理程序,而不是尝试连接到 WinForm 的 KeyDown。

这是一个例子。假设:您的 WinForm 是 type 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 回答