WPF用户控件中的键盘输入不会发送到WinForms容器

| 我们有一个WinForms应用程序,正在逐步将其转换为WPF。此时,应用程序的主窗体是一个窗体(WinForm),其中包含WPF中内置的垂直边栏。侧栏托管在ElementHost控件中。 在主窗体中,KeyPreview设置为true,我们重写OnKeyDown()来处理应用程序范围的键盘快捷键。当侧边栏具有焦点时,键盘事件不会发送到OnKeyDown。 解决此问题的正确方法是什么?     
已邀请:
是的,看来ElementHost不考虑KeyPreview,这是一种解决方法: 从ElementHost派生并重写ProcessCmdKey,当base.ProcessCmdKey结果显示为“未处理”时,即使不是主窗体,也将消息传递给父级,这样您的主窗体将收到该消息,因为其他winforms控件将起作用正确地。这是一个示例...
public class KeyPreviewEnabledElementHost : ElementHost
{
    public KeyPreviewEnabledElementHost()
    {
    }

    [DllImport(\"user32.dll\")]
    public static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); 

    protected override bool ProcessCmdKey(ref System.Windows.Forms.Message m, System.Windows.Forms.Keys keyData)
    {
        bool processed = base.ProcessCmdKey(ref m, keyData);

        if (!processed)
        {
            SendMessage(Parent.Handle, m.Msg, m.WParam, m.LParam);
        }

        return processed;
    }
}
    

要回复问题请先登录注册