2012-03-26 8 views
2

Ich verwende Microsoft.Win32.SaveFileDialog Klasse, um meine Dateien zu speichern. Wenn ich eine Datei gespeichert und meine App minimiert habe, kann ich sie nicht wiederherstellen. Es passiert erst nach der Verwendung Microsoft.Win32.SaveFileDialog. Hier ist Code:SaveFileDialog Fehler in WPF

Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog(); 
dlg.FileName = String.Format("{0} {1} {2}", ev["b"], ev["a"], ev["c"]); 
dlg.DefaultExt = ".csv"; 
dlg.Filter = "Supported format (.csv)|*.csv"; 
Nullable<bool> result = dlg.ShowDialog(); 
if (result == true) 
{ 
    string s = dlg.FileName; 
    //other code 
} 

Datei speichert erfolgreich, aber ich weiß nicht, wie das Problem mit der Minimierung zu lösen. Weiß jemand, was es sein könnte?

+1

Unglaublich ... –

+1

Was steckt hinter '// anderem Code'? –

+0

Vielleicht verbinden Sie sich mit dem FileOK-Event und sehen, dass Sie dort einen Fehler finden können. Nur eine Reichweite. – Paparazzi

Antwort

3

WPF hat alle Arten von seltsamen Modalitätsproblemen, wenn Sie Dialoge ohne übergeordnete Fenster anzeigen. Ich habe dies nicht direkt mit dem SaveFileDialog gesehen, aber ich habe ähnliches Verhalten mit anderen Dialogen gesehen. Verwenden Sie die Überladung von .ShowDialog(), wo Sie im übergeordneten Fenster übergeben.

+0

'Verwenden Sie die Überladung von .ShowDialog(), wo Sie im übergeordneten Fenster übergeben., Könnte sein, ich hatte das gleiche Problem und die Lösung in WinForms –

+0

Ich werde versuchen, danke! –

1

Ich stieß auch auf ein seltsames Modalitätsproblem mit WPF und dem Win32 SaveFileDialog/OpenFileDialog.

Was geschieht:

  • Der modale Zustand verletzt wird/verloren geht vollständig und das Hauptfenster kann angeklickt werden, während der Openfiledialog mit Showdialog geöffnet wird()

Wenn es passiert:

  • Es war eine Aufgabe, vor der Openfiledialog läuft öffnet
  • der Debugger br eaks in einen Haltepunkt vor dem Ausführen Erstellen Sie die Aufgabe

nur eine einfache WPF-Anwendung mit einem Button-Klick-Ereignisse:

private void Button_Click(object sender, RoutedEventArgs e) 
    { // <-- Breakpoint sits here 

     Task.Run(() => {}).Wait(); 

     new Microsoft.Win32.OpenFileDialog().ShowDialog(); 
    } 

die überladene ShowDialog(Window owner) Funktion Mit Hilfe dieses Problem löst.