Dla tych, którzy nie chcą tworzyć niestandardowego okna dialogowego, ale nadal wolą 100% sposób WPF i nie chcą używać oddzielnych plików DDL, dodatkowych zależności lub przestarzałych interfejsów API, wpadłem na bardzo prosty hack przy użyciu okna dialogowego Zapisz jako.
Nie wymaga użycia dyrektywy, możesz po prostu skopiować i wkleić poniższy kod!
Powinien nadal być bardzo przyjazny dla użytkownika i większość ludzi nigdy tego nie zauważy.
Pomysł wynika z tego, że możemy łatwo zmienić tytuł tego okna dialogowego, ukryć pliki i obejść wynikową nazwę pliku.
Z pewnością jest to duży hack, ale może zrobi to dobrze dla twojego użytku ...
W tym przykładzie mam obiekt pola tekstowego, który zawiera ścieżkę wynikową, ale możesz usunąć powiązane linie i użyć wartości zwracanej, jeśli chcesz ...
// 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;
}
Jedyne problemy z tym hackiem to:
- Przycisk Potwierdź nadal mówi „Zapisz” zamiast czegoś takiego jak „Wybierz katalog”, ale w przypadku takich jak kopalnie „Zapisz” wybór katalogu, więc nadal działa ...
- W polu wejściowym nadal widnieje „Nazwa pliku” zamiast „Nazwa katalogu”, ale możemy powiedzieć, że katalog jest rodzajem pliku ...
- Nadal jest rozwijane menu „Zapisz jako typ”, ale jego wartość mówi „Katalog (* .this.directory)”, a użytkownik nie może go zmienić na coś innego, działa dla mnie ...
Większość ludzi tego nie zauważy, chociaż zdecydowanie wolałbym użyć oficjalnego sposobu WPF, jeśli Microsoft straci głowę z tyłków, ale dopóki tego nie zrobią, to moja tymczasowa poprawka.