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.

55voto

Johannes Punkte 6009

Sie müssen die Eigentümer-Eigenschaft des Fensters festlegen.

Sie können ein Fenster über showdialog einblenden, um Ihr Hauptfenster zu blockieren, oder Sie können es normal einblenden und es über dem Eigentümer haben, ohne den Eigentümer zu blockieren.

hier ist ein Codebeispiel für den Code Behind Teil - ich habe alle offensichtlichen Dinge weggelassen:

namespace StackoverflowExample
{
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();
    }
    void NewWindowAsDialog(object sender, RoutedEventArgs e)
    {
      Window myOwnedDialog = new Window();
      myOwnedDialog.Owner = this;
      myOwnedDialog.ShowDialog();
    }
    void NormalNewWindow(object sender, RoutedEventArgs e)
    {
      Window myOwnedWindow = new Window();
      myOwnedWindow.Owner = this;
      myOwnedWindow.Show();
    }
  }
}

2 Stimmen

Das ist genau das, wonach ich gesucht habe - wie man ein neues Fenster öffnet, das den Fokus/die Aktivität bis zum Schließen beibehält. Ich danke Ihnen.

2 Stimmen

Besser ist es, hinzuzufügen myOwnedDialog.ShowInTaskbar = false; in bis NewWindowAsDialog

17voto

viky Punkte 16757

Stattdessen können Sie ein Popup verwenden, das immer als oberstes Fenster angezeigt wird, es ähnlich wie ein Fenster dekorieren und es vollständig mit Ihrer Anwendung verbinden, indem Sie das Ereignis LocationChanged Ihres Hauptfensters behandeln und die Eigenschaft IsOpen des Popups auf false setzen.

Bearbeiten:

Ich hoffe, Sie wollen so etwas:

    Window1 window;

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        window = new Window1();
        window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
        window.Topmost = true;
        this.LocationChanged+=OnLocationchanged;
        window.Show();
    }

    private void OnLocationchanged(object sender, EventArgs e)
    {
          if(window!=null)
              window.Close();
    }

Hoffentlich hilft es!!!

1 Stimmen

Dadurch wird das Fenster auch über allen anderen Anwendungen angezeigt. Und was ist die Bedeutung des LocationChanged-Handlers (btw: Handler sind nicht mit 'On' durch C # Konvention vorangestellt)?

14voto

Alex Punkte 141
CustomWindow cw = new CustomWindow();

cw.Owner = Application.Current.MainWindow;

cw.ShowInTaskbar = false;

cw.ShowDialog() ;

1 Stimmen

Können Sie zusammen mit Ihrem Code eine Erklärung abgeben - das hilft jedem, Ihre Antwort zu verstehen

1 Stimmen

Wenn Sie das Fenster so konfigurieren, wird es sich wie gewünscht verhalten. Das Fenster wird über allen anderen Fenstern in der Anwendung angezeigt

0 Stimmen

Hat bei mir nicht funktioniert "null reference exception". Mein Dialog ist ein WPF-Fenster, aber die Anwendung und Hauptfenster sind WinForms.

11voto

Glenn Slayden Punkte 15791

Einfach zu erledigen in XAML und ich bin überrascht, dass noch niemand diese Antwort gepostet hat. In dem folgenden Beispiel wird die Window ist definiert in einem ResourceLibrary (Beachten Sie die x:Key ), aber Sie können diese XAML-Bindung auch in einer eigenständigen Page -Style WPF-Ressource.

<Window x:Key="other_window" 
        Topmost="{Binding Source={x:Static Application.Current},Path=MainWindow.IsActive,Mode=OneWay}">
    <TextBlock Text="OTHER WINDOW" />
</Window>

5voto

Sudhakar Singh Punkte 429

Verwenden Sie die Methode Activate(). Damit wird versucht, das Fenster in den Vordergrund zu bringen und es zu aktivieren. z.B. Window wnd = new xyz(); wnd.Activate();

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