Đối với những người không muốn tạo hộp thoại tùy chỉnh nhưng vẫn thích cách WPF 100% và không muốn sử dụng DDL riêng, phụ thuộc bổ sung hoặc API lỗi thời, tôi đã nghĩ ra cách hack rất đơn giản bằng hộp thoại Lưu dưới dạng.
Không sử dụng chỉ thị cần thiết, bạn có thể chỉ cần sao chép-dán mã bên dưới!
Nó vẫn phải rất thân thiện với người dùng và hầu hết mọi người sẽ không bao giờ chú ý.
Ý tưởng xuất phát từ việc chúng ta có thể thay đổi tiêu đề của hộp thoại đó, ẩn các tệp và làm việc xung quanh tên tệp kết quả khá dễ dàng.
Đó là một hack lớn chắc chắn, nhưng có lẽ nó sẽ làm tốt công việc của bạn ...
Trong ví dụ này tôi có một đối tượng hộp văn bản để chứa đường dẫn kết quả, nhưng bạn có thể xóa các dòng liên quan và sử dụng giá trị trả về nếu bạn muốn ...
// 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;
}
Các vấn đề duy nhất với hack này là:
- Nút xác nhận vẫn nói "Lưu" thay vì một cái gì đó như "Chọn thư mục", nhưng trong trường hợp như mỏ tôi "Lưu" lựa chọn thư mục để nó vẫn hoạt động ...
- Trường nhập vẫn nói "Tên tệp" thay vì "Tên thư mục", nhưng chúng ta có thể nói rằng thư mục là một loại tệp ...
- Vẫn còn một danh sách thả xuống "Lưu dưới dạng", nhưng giá trị của nó ghi là "Thư mục (* .this.directory)" và người dùng không thể thay đổi nó thành một thứ khác, hoạt động với tôi ...
Hầu hết mọi người sẽ không chú ý đến những điều này, mặc dù tôi chắc chắn sẽ thích sử dụng một cách chính thức của WPF nếu microsoft sẽ thoát khỏi cái mông của họ, nhưng cho đến khi họ làm vậy, đó là cách khắc phục tạm thời của tôi.