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.

0voto

Meloviz Punkte 551

Ich bin gerade auf das gleiche Problem gestoßen. Ich habe eine Desktop-App, die mehrere WPF-Fenster hat, und ich brauchte meine benutzerdefinierte Splash-Screen auf die anderen Windows in meiner App nur sein. Keine anderen Windows sind geöffnet, wenn mein Startbildschirm angezeigt wird, aber ich öffne das MainWindow von meinem Startbildschirm nach einigen Authentifizierung. Also habe ich etwas ähnliches wie @GlenSlayden getan, aber in Code hinter, da, wie ich sagte, das MainWindow ist nicht für mich zu binden, um:

private void SplashScreen_ContentRendered(object sender, EventArgs e)
{
    // User authentication...
    // ...

    MainWindow mainWindow = new MainWindow();
    SetBinding(SplashScreen.TopmostProperty, new Binding("IsVisible"))
    {
        Source = mainWindow,
        Mode = BindingMode.OneWay,
        UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
    };
    mainWindow.Show();
}

Während mein Programm alle anderen Fenster aus dem Hauptfenster lädt, ist der Splash-Screen oben, aber während das Programm den Benutzer authentifiziert, ist er nicht ganz oben, so dass man auf ein anderes Programm klicken kann und er sich dahinter versteckt. Das ist die beste Lösung, die ich für dieses Problem finden konnte. Es ist nicht perfekt, weil es immer noch alle anderen Anwendungen überlagert, während mein Programm nach der Authentifizierung geladen wird, aber das ist in meinem Fall nicht sehr lange der Fall.

0voto

Error404 Punkte 721

Wie wäre es damit:

Private Sub ArrangeWindows(Order As Window())
    For I As Integer = 1 To Order.Length -1
        Order(I).Owner = Order(I - 1)
    Next
End Sub

0voto

user3104278 Punkte 1

Auch ich hatte das gleiche Problem und bin Google zu dieser Frage gefolgt. Kürzlich fand ich die folgenden für mich gearbeitet.

CustomWindow cw = new CustomWindow();
cw.Owner = this;
cw.ShowDialog();

0 Stimmen

Was wäre, wenn cw bereits existierte, und Sie wollten diese um darunter zu sein?

0voto

Satya Prakash Punkte 7

Versuchen Sie dies:

Popup.PlacementTarget = sender as UIElement;

-1voto

John B Punkte 110

Gerade lernen C# und lief über ähnliche Situation. aber eine Lösung gefunden, die ich denke, kann helfen. Sie können dies vor langer Zeit herausgefunden haben. Dies wird von Beginn eines neuen Projekts sein, aber Sie können es in jedem verwenden.

1) Starten Sie ein neues Projekt.

2) Gehen Sie zu Projekt, dann Neues Windows-Formular, wählen Sie Windows-Formular und nennen Sie Splash.

3) Größe, Hintergrund, Text usw. nach Wunsch einstellen.

4) Setzen Sie unter Eigenschaften des Formulars Splash.cs die Option Startposition: CenterScreen und TopMost: true

5) form1 hinzufügen "using System.Threading;"

6) form1 unter class hinzufügen "Splash splashscreen = new Splash();"

7) form1 hinzufügen "splashscreen.Show();" und "Application.DoEvents();"

8) form1 unter Events>>Focus>>Activated hinzufügen "Thread.Sleep(4000); splashscreen.Close();"

9) Splash.cs unter "Public Splash" hinzufügen "this.BackColor = Color.Aqua;" /kann jede Farbe verwenden

10) Dies ist der Code für Form1.cs

public partial class Form1 : Form
{
    Splash splashscreen = new Splash();
    public Form1()
    {
        InitializeComponent();
        splashscreen.Show();
        Application.DoEvents();

    }

    private void Form1_Activated(object sender, EventArgs e)
    {
        Thread.Sleep(4000);
        splashscreen.Close();
    }
}

11) Dies ist der Code in Splash.cs

public partial class Splash : Form
{
    public Splash()
    {
        InitializeComponent();
        this.BackColor = Color.Aqua;
    }
}

12) Ich habe festgestellt, dass der Bildschirm nicht so lange oben bleibt, bis das erste Formular aktiviert ist, wenn man NICHT im Splash etwas tut. Der Thread Count lässt den Splash nach x Sekunden verschwinden, Ihr Programm ist also normal.

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