Özel bir iletişim kutusu oluşturmak istemeyen, ancak yine de% 100 WPF yolunu tercih edenler ve ayrı DDL'ler, ek bağımlılıklar veya eski API'ler kullanmak istemeyenler için, Farklı Kaydet iletişim kutusunu kullanarak çok basit bir kesmek buldum.
Direktif kullanmak gerekmez, aşağıdaki kodu kopyalayıp yapıştırabilirsiniz!
Hala çok kullanıcı dostu olmalı ve çoğu insan asla fark etmeyecek.
Fikir, o iletişim kutusunun başlığını değiştirebileceğimiz, dosyaları gizleyebileceğimiz ve sonuçta ortaya çıkan dosya adının etrafında kolayca çalışabileceğimiz gerçeğinden geliyor.
Kesinlikle büyük bir hack, ama belki de işi kullanımınız için iyi yapacak ...
Bu örnekte, ortaya çıkan yolu içerecek bir metin kutusu nesnesi var, ancak ilgili satırları kaldırabilir ve isterseniz bir dönüş değeri kullanabilirsiniz ...
// 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;
}
Bu hack ile ilgili sadece sorunlar:
- Onay düğmesi hala "Dizin seç" gibi bir şey yerine "Kaydet" diyor, ancak mayın gibi bir durumda dizin seçimini "çalışır", böylece hala çalışıyor ...
- Giriş alanı hala "Dizin adı" yerine "Dosya adı" diyor, ancak bir dizinin bir dosya türü olduğunu söyleyebiliriz ...
- Hala bir "Kayıt türü" açılır listesi var, ancak değeri "Dizin (* .this.directory)" diyor ve kullanıcı bunu başka bir şey için değiştiremiyor, benim için çalışıyor ...
Çoğu insan bunları fark etmeyecek olsa da, eğer microsoft başlarını kıçlarından çıkarırsa kesinlikle resmi bir WPF yolu kullanmayı tercih ederdim, ancak bunu yapana kadar, bu benim geçici çözümüm.