Per coloro che non vogliono creare una finestra di dialogo personalizzata ma preferiscono comunque un modo WPF al 100% e non vogliono usare DDL separati, dipendenze aggiuntive o API obsolete, ho trovato un trucco molto semplice usando la finestra di dialogo Salva con nome.
Non è necessario utilizzare la direttiva, puoi semplicemente copiare e incollare il codice qui sotto!
Dovrebbe essere comunque molto intuitivo e la maggior parte delle persone non se ne accorgerà mai.
L'idea nasce dal fatto che possiamo cambiare il titolo di quella finestra di dialogo, nascondere i file e aggirare il nome del file risultante abbastanza facilmente.
È sicuramente un grande trucco, ma forse farà il lavoro bene per il tuo utilizzo ...
In questo esempio ho un oggetto casella di testo per contenere il percorso risultante, ma è possibile rimuovere le righe correlate e utilizzare un valore restituito se si desidera ...
// 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;
}
Gli unici problemi con questo trucco sono:
- Il pulsante di conferma dice ancora "Salva" invece di qualcosa come "Seleziona directory", ma in un caso come miniere "Salva" la selezione della directory in modo che funzioni ancora ...
- Il campo di input dice ancora "Nome file" invece di "Nome directory", ma possiamo dire che una directory è un tipo di file ...
- Esiste ancora un menu a discesa "Salva come tipo", ma il suo valore dice "Directory (* .this.directory)" e l'utente non può cambiarlo per qualcos'altro, funziona per me ...
La maggior parte delle persone non se ne accorgerà, anche se preferirei sicuramente usare un modo WPF ufficiale se Microsoft si togliesse la testa dai culi, ma fino a quando non lo farà, questa è la mia soluzione temporanea.