如何使ElementHost透明,以使其后面的表格可见且可点击?

时间:2009-02-19 08:05:43

标签: .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 | WS_EX_TRANSPARENT;
            return cp;
        }
    }

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

1 个答案:

答案 0 :(得分:2)

尝试将此添加到派生类:

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控件。