Einstellung von DialogResult nur nach ShowDialog () in WPF

8

Ich habe ein Fenster, das ich manchmal mit Show() und manchmal mit ShowDialog() öffne. Im zweiten Fall ist das zurückgegebene Dialog-Ergebnis für mich wichtig. Aber wenn ich DialogResult nach Aufruf von Show() setze, bekomme ich InvalidOperationException . Gibt es eine Möglichkeit, herauszufinden, welche Methode zum Öffnen des Fensters verwendet wurde, und das DialogResult entsprechend einzustellen oder nicht? Oder gibt es einen anderen Weg?

Natürlich weiß ich, dass ich die Ausnahme fangen und ignorieren kann, aber ich mag diese Lösung nicht.

    
svick 04.09.2009, 11:10
quelle

4 Antworten

9

Verwenden Sie System.Windows.Interop.ComponentDispatcher.IsThreadModal innerhalb des Fensters, um festzustellen, ob es in einem modalen Thread ausgeführt wird oder nicht.

    
Pop Catalin 04.09.2009, 11:21
quelle
3

Wenn Sie set_DialogResult in Reflector betrachten, überprüft es _showingAsDialog, um festzustellen, ob der Dialog modal ist. Leider ist dies ein privates Feld.

Konstruieren Sie vor dem Aufruf von Show () / ShowDialog () immer eine neue Instanz des Fensters. Wenn ja, könnten Sie dem Konstruktor ein Argument übergeben, das angibt, wie es angezeigt werden soll.

    
Phil Devaney 04.09.2009 11:24
quelle
2

Sie können die Eigenschaft Form.Modal verwenden, um die Art der Verwendung zu überprüfen.

Bei der Verwendung von Form.Show() müssen Sie einen anderen Weg verwenden, um dem Aufrufer die Ergebnisse des Formulars mitzuteilen.

Gibt es einen Grund, beide Möglichkeiten des Formulars zu verwenden?

    
Frank Bollack 04.09.2009 11:30
quelle
0

Wie wäre es, einfach dieses.DialogResult = DialogResult.blah im Formular-Closing-Event zu setzen?

    
Stuart Grassie 04.09.2009 11:14
quelle

Tags und Links