WPF und transparente Fenster mit Rahmen im FrameworkElement docken

Drache2

Erfahrenes Mitglied
So.
Und schon das nächste Problem.

Will nun ein paar kleinere Toolfenster in einem Fremworkelement docken UND wenn der Mauszeiger nicht auf denen ist, sollen diese SAMT RAHMEN transparent werden (bzw. halbdurchsichtig).

Nun stoße ich jedoch an meine Grenzen in WPF.

Das Docken bekomme ich imoment nur zum gesamten Hauptfenster hin, ein Anfang, aber nicht mein Ziel und auch sehr unschöner Code (instabil¿).

Code den ich als Funktion aufriufe
Code:
Helfer.Fenster_Docken.SetParent(
                        new System.Windows.Interop.WindowInteropHelper(this.linienlistefenster).Handle,
                        new System.Windows.Interop.WindowInteropHelper((Window)((Grid)this.Parent).Parent).Handle);

Code hinter der SetParent-Funktion (Modifizierter und gekürzter Code aus dem Internet, aber funktionsfähig)
Code:
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr
        FindWindow([MarshalAs(UnmanagedType.LPTStr)] string lpClassName,
        [MarshalAs(UnmanagedType.LPTStr)] string lpWindowName);

        [DllImport("user32.dll")]
        public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

        /// <summary>
        /// Einzelnes Form auf den Desktop Festkleben
        /// </summary>
        /// <param name="formToDock">Formular, dass an den Desktop gedockt werden soll</param>
        public void StartDocking(Window formToDock, IntPtr Parent)
        {
            IntPtr hwndParent = FindWindow("progman", null);
            SetParent(new WindowInteropHelper(formToDock).Handle, hwndParent);
        }

Das wäre der eine Teil.

Das mit der Transparenz haut dem ganzen jedoch den Boden aus dem Fass.
Einerseits mag WPF das anscheinend nur wenn ich AllowTransparency auf true stelle.
Im Hauptfenster kein problem, da das eh keinen Rahmen hat.
Im Toolfenster jedoch ein Problem, da das seinen Rahmen behalten soll.
Zudem verschwindet das Toolfenster sofort nach dem Öffnen.
Wenn ich jedoch AllowTransparency im Hauptfenster auf false stelle, bleibt es da, wird aber auch nur grau abgestuft.

Wenn wer nicht weiß wie ich das meine, Paint.Net ist dazu das beste Beispiel.
Hoffe es weiß mal wieder wer Rat^^

Gruß Drache2
 
Ja, gut, das löst schonmal ein Problem :) Dankeschön
Dennoch verschwindet das Fenster, bzw. es taucht nicht einmal auf, wenn ich es auf das Hauptfenster docke (zudem muss es doch eine bessere Methode dafür geben. Irgentwie mit AddChild bzw Set Parent?, Muss allerdings für ein FrameworkElement benutzbar sein, notfalls auch für ein UserControl, aber lieber Frameworkelement)
 
Kennst du die DockPanel Suite? Damit kannst du Forms in andere docken. Vielleicht findest du im (recht langen) Quellcode eine Idee wie es dort gemacht wird; ist allerdings für WinForms und nicht WPF.
 
Hmm, nein, habs mir mla angeguckt, aber nur gesehen, dass se mit dem Dockpanel arbeiten.

Hab's jetzt auch anders gelöst.
Hab mir nen Fenster als UserControl geschrieben.
Mit Rahmen (schlicht, aber das ist egal)
Musste zwa alles selber schreiben, aber es funktioniert wenigstens :)
Den Code stelle ich vielleicht mal online wenn ich den weiter ausgebaut habe und zudem verallgemeinert.
Trotzdem vielen Dank :)

//EDIT:
So. habe den Ciode jetzt mal als Anhang hochgeladen.
Ein "einfaches" Usercontrol mit Rahmen,, Titel und Schließenbutton.
Verschiebbar und größenveränderbar
Keinerlei besonderheiten sonst.
Darf jeder als Vorlage oder so wie es ist benutzen.
 

Anhänge

  • UserControlWindow.zip
    3 KB · Aufrufe: 50
Zuletzt bearbeitet:
Zurück