2010-12-03 56 views
7

我有一個WinForms應用程序在ElementHost中使用WPF控件(如果它很重要,請使用Avalon編輯器)。Winforms中的WPF事件

它似乎工作正常,但我希望能夠以Winforms方式(沒有RoutedCommands和InputGestures)處理此控件的KeyPress事件,所以我儘管可以使用KeyPreview設置來處理Form的KeyDown事件,但WPF事件似乎沒有起泡到表單。

所以基本上,你如何以Winforms的方式訪問WPF控件上的KeyDown事件?

回答

6

您可以嘗試爲WpfControl本身添加自定義事件處理程序,而不是嘗試連接到WinForm的KeyDown。

下面是例子。假設您的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屬性不是我所見過的修飾符和鍵的按位組合,它只是按下的主鍵。 – Miguel 2010-12-04 01:57:00