Für diejenigen, die kein benutzerdefiniertes Dialogfeld erstellen möchten, aber dennoch eine 100% WPF-Methode bevorzugen und keine separaten DDLs, zusätzlichen Abhängigkeiten oder veralteten APIs verwenden möchten, habe ich mithilfe des Dialogfelds Speichern unter einen sehr einfachen Hack entwickelt.
Keine Verwendung der Direktive erforderlich, Sie können einfach den folgenden Code kopieren und einfügen!
Es sollte immer noch sehr benutzerfreundlich sein und die meisten Leute werden es nie bemerken.
Die Idee kommt von der Tatsache, dass wir den Titel dieses Dialogfelds ändern, Dateien ausblenden und den resultierenden Dateinamen ganz einfach umgehen können.
Es ist sicher ein großer Hack, aber vielleicht macht es den Job gut für Ihren Gebrauch ...
In diesem Beispiel habe ich ein Textfeldobjekt, das den resultierenden Pfad enthält, aber Sie können die zugehörigen Zeilen entfernen und einen Rückgabewert verwenden, wenn Sie möchten ...
// Create a "Save As" dialog for selecting a directory (HACK)
var dialog = new Microsoft.Win32.SaveFileDialog();
dialog.InitialDirectory = textbox.Text; // Use current value for initial dir
dialog.Title = "Select a Directory"; // instead of default "Save As"
dialog.Filter = "Directory|*.this.directory"; // Prevents displaying files
dialog.FileName = "select"; // Filename will then be "select.this.directory"
if (dialog.ShowDialog() == true) {
string path = dialog.FileName;
// Remove fake filename from resulting path
path = path.Replace("\\select.this.directory", "");
path = path.Replace(".this.directory", "");
// If user has changed the filename, create the new directory
if (!System.IO.Directory.Exists(path)) {
System.IO.Directory.CreateDirectory(path);
}
// Our final value is in path
textbox.Text = path;
}
Die einzigen Probleme mit diesem Hack sind:
- Die Schaltfläche "Bestätigen" sagt immer noch "Speichern" anstelle von "Verzeichnis auswählen", aber in einem Fall wie Minen "speichere" ich die Verzeichnisauswahl, damit es immer noch funktioniert ...
- Das Eingabefeld sagt immer noch "Dateiname" anstelle von "Verzeichnisname", aber wir können sagen, dass ein Verzeichnis ein Dateityp ist ...
- Es gibt immer noch ein Dropdown-Menü "Dateityp", aber der Wert lautet "Verzeichnis (* .this.directory)", und der Benutzer kann es nicht für etwas anderes ändern, funktioniert für mich ...
Die meisten Leute werden dies nicht bemerken, obwohl ich es definitiv vorziehen würde, einen offiziellen WPF-Weg zu verwenden, wenn Microsoft ihre Köpfe aus ihren Ärschen bekommen würde, aber bis sie es tun, ist das meine vorübergehende Lösung.