2010-12-03 3 views
7

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

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

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

ответ

6

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

Вот пример. Предположим: ваш 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.ModifiersSystem.Windows.Input.KeyEventArgs) хранит информацию о Ctrl, Alt и т.д.

+0

Проблема заключается в том, что System.Windows.Input.KeyEventArgs фактически не подвергать модифицирующие клавиши, так что вы можете 't проверить' Ctrl + Z ', только' Z 'или' Ctrl '. Даже свойство Key не является побитовой комбинацией модификатора и ключа от того, что я видел, это просто нажатие основной клавиши. – Miguel 2010-12-04 01:57:00