Для тих, хто не хоче створити спеціальний діалог, але все-таки вважає за краще 100% WPF спосіб і не хоче використовувати окремі DDL, додаткові залежності або застарілі API, я придумав дуже простий хак, використовуючи діалогове вікно "Зберегти як".
Не використовуючи директиви, ви можете просто скопіювати і вставити код нижче!
Це все ще має бути дуже зручним для користувачів, і більшість людей ніколи не помітять.
Ідея випливає з того, що ми можемо змінити заголовок цього діалогового вікна, приховати файли та обробити отримане ім'я файлу досить легко.
Це точно великий злом, але, можливо, це зробить роботу просто чудово для вашого використання ...
У цьому прикладі у мене є об'єкт текстового поля, який містить результуючий шлях, але ви можете видалити пов'язані рядки та використовувати зворотне значення, якщо бажаєте ...
// 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;
}
Єдині проблеми з цим злом:
- Кнопка "Підтвердження" все ще говорить "Зберегти" замість чогось типу "Вибрати каталог", але у випадку, як міни, я "Збережу" вибір каталогу, щоб він все ще працював ...
- Поле введення все ще говорить "Ім'я файлу" замість "Ім'я каталогу", але ми можемо сказати, що каталог - це тип файлу ...
- Ще є спадне меню "Зберегти як тип", але його значення говорить "Каталог (* .this.directory)", і користувач не може змінити його на щось інше, працює для мене ...
Більшість людей цього не помітять, хоча я, безумовно, вважаю за краще використовувати офіційний спосіб WPF, якби мікрософт виводив голову з дуп, але поки вони цього не зробили, це моє тимчасове рішення.