События WPF в Winforms - PullRequest
       27

События WPF в Winforms

7 голосов
/ 04 декабря 2010

У меня есть приложение Winforms, которое использует элемент управления WPF (Avalon Edit, если это имеет значение) внутри ElementHost.

Кажется, что он работает нормально, но я хотел бы иметь возможность обрабатывать события KeyPress этого элемента управления способом Winforms (без RoutedCommands и InputGestures), поэтому я хотя бы мог обработать событие KeyDown формы с установленным KeyPreview, но события WPF, похоже, не доходят до формы.

Итак, как вы можете получить доступ к событию KeyDown в элементе управления WPF способом Winforms?

1 Ответ

6 голосов
/ 04 декабря 2010

Вы можете попытаться добавить пользовательский обработчик событий для самого WpfControl вместо попытки подключиться к WinForm KeyDown.

Вот пример.Допустим, ваш WinForm имеет тип Form1, WpfControl равен UserControl1, и вызывается элемент host для 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 и т. д.

...