74 Stimmen

Wie ein WPF-Fenster über alle anderen Fenster meiner Anwendung (nicht systemweit) sein?

Ich möchte, dass mein Fenster über allen anderen Fenstern angezeigt wird. nur bei meiner Bewerbung . Wenn ich die TopMost-Eigenschaft eines Fensters einstelle, wird es über allen Fenstern aller Anwendungen angezeigt, und das möchte ich nicht.

0 Stimmen

Übrigens kann ich für dieses Fenster keinen Eigentümer festlegen, da dieses Fenster vor allen anderen Fenstern erstellt wird (es ist der Startbildschirm der Anwendung). Ref: stackoverflow.com/questions/2463149/

0 Stimmen

Auch wenn die Frage schon etwas älter ist, muss ich doch diese Anmerkung machen... Ihre Frage und der Kommentar sind ziemlich seltsam, Sie wollen Ihr Fenster oben in Ihrer Anwendung haben, aber in Ihrem Kommentar geben Sie an, dass keine Anwendung läuft, da es das erste Fenster (Startbildschirm) ist, also wie kann Ihr Fenster oben auf einer nicht vorhandenen Anwendung sein?!? Ich frage mich, wie um alles in der Welt diese Frage 16 positive Bewertungen erhalten konnte.

1 Stimmen

Wenn die App startet, gibt es kein anderes Fenster, sondern das Hauptfenster erscheint kurz danach und muss hinter dem Startbildschirm bleiben, bis alles geladen ist.

5voto

Eric Tremblay Punkte 51

Überlädt im Popup-Fenster die Methode Show() mit einem Parameter:

Public Overloads Sub Show(Caller As Window)
    Me.Owner = Caller
    MyBase.Show()
End Sub

Rufen Sie dann im Hauptfenster Ihre überladene Methode Show() auf:

Dim Popup As PopupWindow

Popup = New PopupWindow
Popup.Show(Me)

4voto

Ashley Grenon Punkte 8840

Ich war in einer sehr ähnlichen Situation wie Sie. Die meisten der sucht Ich bin darauf gestoßen, dass ich nur den Besitzer des Fensters, das ich als oberstes Fenster haben möchte, auf das Hauptfenster oder das Fenster mit dem Namen "Anzeigen" setzen muss.

Wie auch immer, ich werde jetzt eine Lösung posten, die bei mir gut funktioniert hat.

Ich habe Ereignishandler für Window.Activated und Window.Deactived in dem Fenster erstellt, das in Bezug auf meine Anwendung das oberste sein sollte.

private void Window_Activated(object sender, EventArgs e)
{
    Topmost = true;
}

private void Window_Deactived(object sender, EventArgs e)
{
    if(Owner == null || Owner.IsActive)
        return;
    bool hasActiveWindow = false;
    foreach(Window ownedWindow in Owner.OwnedWindows)
    {
        if(ownedWindow.IsActive)
            hasActiveWindow = true; 
    }

    if(!hasActiveWindow)
        Topmost = false;
}

Das funktioniert bei mir hervorragend. Hoffentlich ist das für jemand anderen da draußen nützlich :o)

0 Stimmen

Wenn ich auf eine andere Anwendung klicke, ist mein Fenster nicht mehr aktiv, so dass Topmost nie auf false gesetzt wird.

0 Stimmen

Ich konnte dies zum Funktionieren bringen, indem ich Topmost in der if-Anweisung prüfte, anstatt IsActive: if (ownedWindow.Topmost)...

4voto

Omid-RH Punkte 1296

Am besten setzen Sie diese beiden Ereignisse für alle Fenster Ihrer Anwendung:

GotKeyboardFocus
LostKeyboardFocus

auf diese Weise:

WiondowOfMyApp_GotKeyboardFocus(object sender, System.Windows.Input.KeyboardFocusChangedEventArgs e)
{
    windowThatShouldBeTopMost.TopMost = true;
}

WiondowOfMyApp_LostKeyboardFocus(object sender, System.Windows.Input.KeyboardFocusChangedEventArgs e)
{
    windowThatShouldBeTopMost.TopMost = false;
}
  • und sicherlich sollten alle Fenster, die Sie oben sein wollen, von anderen Fenstern Ihrer Anwendung aus zugänglich sein. In meinem Fall habe ich ein Basisfenster und einige andere Fenster, die oben auf meinem Basisfenster sein sollten, so war dies nicht schlecht zu meinem Basisfenster hat Instanz von jedem anderen Windows.

0 Stimmen

Dies funktioniert einwandfrei für die Erstellung von Popup- oder Utility-Fenstern, die nicht über den Fenstern anderer Anwendungen schweben, wenn sie nicht aktiv sind. Danke!

2voto

Sylvain Punkte 18881

Ich bin der OP. Nach einigen Recherchen und Tests lautet die Antwort:

Nein, es gibt keine Möglichkeit, die genau das.

1 Stimmen

Es gibt verschiedene Möglichkeiten, dies zu tun. Einige der gegebenen Antworten sind gute Kandidaten.

0 Stimmen

Also, erklären Sie mir, wie paint.net die Farbe, Geschichte und Toolbox Windows, die nur auf der Oberseite der Anwendung ist gemacht?

0 Stimmen

@BurakYeniçeri 9 years later....Ich weiß es nicht. Damals kam ich zu dem Schluss, dass dies nach vielen Versuchen nicht möglich war. Viel später kam Johannes mit einer Lösung, die eine Menge Upvotes hat, ich nehme an, es ist eine gute Lösung. Ich habe das "Akzeptieren" bei meiner eigenen Antwort gelöscht.

2voto

Chris Thornton Punkte 15410

Es gibt mehrere Threads, es gibt sogar einen "Topmost"-Tag. Suchen Sie danach, oder gehen Sie direkt zu diesem Beitrag, der gut aussieht:

Wie kann ich ein Fenster über alle anderen Fenster in meiner Anwendung legen?

4 Stimmen

Diese Frage ist für "Windows Forms" Windows. Ich habe WPF Fenster.

1 Stimmen

Ich kann die Eigenschaft Owner nicht festlegen, da das Fenster in meinem Fall vor allen anderen Fenstern erstellt wird. Daher habe ich kein anderes Fenster, das ich als Eigentümer festlegen könnte.

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