您可以尝试为 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 等的信息。