我尝试派生一个类形式的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;
}
}
这使它透明,但表单不可点击。
答案 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控件。