2 Stimmen

Wie kann ich einen ElementHost transparent machen, so dass das Formular dahinter sichtbar und anklickbar ist?

Ich habe versucht, eine Klasse von ElementHost abzuleiten und die Methode CreateParams zu überschreiben:

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

Dadurch wird es transparent, aber das Formular ist nicht anklickbar.

2voto

Nir Punkte 28685

Versuchen Sie, dies zu Ihrer abgeleiteten Klasse hinzuzufügen:

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);
   }
}

Dies sollte die gesamte ElementHost "transparent" für die Maus zu machen, wenn Sie den WPF-Inhalt auf die Maus reagieren wollen, müssen Sie VisualTreeHelper.HitTest verwenden, um zu entscheiden, was von Ihrem WM_NCHITTEST Handler zurückgeben.

Ich habe es nicht mit ElementHost getestet, aber es funktioniert mit normalen WinForms-Steuerelementen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X