.net 如何使ElementHost透明,使其后面的窗体可见并可单击?

.net 如何使ElementHost透明,使其后面的窗体可见并可单击?,.net,wpf,winforms,transparency,.net,Wpf,Winforms,Transparency,我试图从ElementHost派生一个类并覆盖CreateParams方法: protected override CreateParams CreateParams { get { const int WS_EX_TRANSPARENT = 0x20; CreateParams cp = base.CreateParams; cp.ExStyle = cp.ExStyle |

我试图从ElementHost派生一个类并覆盖CreateParams方法:

    protected override CreateParams CreateParams
    {
        get
        {
            const int WS_EX_TRANSPARENT = 0x20;
            CreateParams cp = base.CreateParams;
            cp.ExStyle = cp.ExStyle | WS_EX_TRANSPARENT;
            return cp;
        }
    }

这使其透明,但表单不可单击。

尝试将其添加到派生类中:

private const int WM_NCHITTEST             = 0x0084;
private const int HTTRANSPARENT            = (-1);

protected override void WndProc(ref Message m)
{
   if (m.Msg == WM_NCHITTEST)
   {
      m.Result = (IntPtr) HTTRANSPARENT;
   }
   else
   {
      base.WndProc(ref m);
   }
}
这将使整个ElementHost对鼠标“透明”,如果希望WPF内容响应鼠标,则必须使用VisualTreeHelper.HitTest来决定从WM_NCHITTEST处理程序返回什么


我没有用ElementHost测试过它,但它可以与普通WinForms控件一起使用。

我感觉ElementHost沉浸在黑暗艺术中。例如,我注意到ElementHost不能很好地处理其父窗体的不透明性。希望有人能帮你。你是在哪门课上写上述代码的?如果这个答案被接受,这是否意味着OP成功地让它工作了?我在自己的应用程序中也尝试过同样的方法,但是WPF控件直到悬停在上面才出现,并且下面的WinForms控件从未收到任何鼠标输入(尽管它们是可见的)。我认为这也不管用(至少没有进一步的解释)。