Fenster öffnen wpf

Gast #3502543
Lesenswert?
• ▲
▼
Hallo,

ich versuche, aus meinem Hauptfenster ein zweites Fenster in wpf zu 
öffnen. Um ein bereits geöffnetes Fenster nicht erneut zu öffnnen, 
versuche ich das (bislang erfolglos) zu behandeln.



1
public partial class MainWindow : Window
2
{
3
      HelpWindow newWindow = new HelpWindow();
4

5

6
       private void buttonHelp_Click(object sender, RoutedEventArgs e)
7
       {       
8
       if (newWindow.IsActive == false)
9
       {                 
10
          newWindow.Show();
11
       }
12
       else
13
       {
14
                
15
       }
16
}

Gut, das erste Mal wird das Fenster geöffnet. Sofern ich den Button 
betätige, wird es nicht nochmal geöffnet.
Wenn ich das Hilfsfenster jedoch schließe und den Button nochmal drücke,
erhalte ich die Fehlermeldung:

Visibility kann nicht festgelegt oder Show, ShowDialog oder 
WindowInteropHelper.EnsureHandle können nicht aufgerufen werden, nachdem 
ein Window geschlossen wurde.

Macht Sinn. Schließlich ist das Objekt "newWindow" vom Carbage Collector 
entfernt worden (?).

Wie geht man hier richtig vor?
#3502552
Lesenswert?
• ▲
▼
Ilsa schrieb:
> Macht Sinn. Schließlich ist das Objekt "newWindow" vom Carbage Collector
> entfernt worden (?).

Da du ja noch eine Referenz auf das Fenster hältst, wird es NICHT vom GC 
entfernt. Dennoch kann man es nach dem Schließen nicht mehr verwenden, 
da hast du Recht.

Was du vermutlich tun solltest:
Registriere dich für das Schließ-Event des Fensters. Brich dort den 
Schließvorgang ab, und verstecke das Fenster statt dessen. So wird 
dieses nicht zerstört und kann wieder angezeigt werden.
Gast #3502688
Lesenswert?
• ▲
▼
Man könnte auch ein komplett neues Fenster erzeugen, aber dann verliert 
man ohne weitere Maßnahmen natürlich den Zustand der Controls (z.B. die 
aktuelle Scrollposition eines Textes in "HelpWindow"). Der Weg, den 
Boris beschrieben hat, ist der einfachere und in diesem Fall sicher auch 
bessere.
Gast #3506271
Lesenswert?
• ▲
▼
Hallo Boris,

danke für Deinen Vorschlag.

Eine Frage zu Deinem Vorschlag: Wie kann ich den EventHandler
1
private void Window_Closed(object sender, EventArgs e)
2
        {
3

4
        }

meines Hilfe-Fensters im Hauptfenster abfragen?

Ilsa

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren