Para aquellos que no quieren crear un cuadro de diálogo personalizado, pero aún prefieren una forma 100% WPF y no quieren usar DDL separados, dependencias adicionales o API obsoletas, se me ocurrió un truco muy simple usando el cuadro de diálogo Guardar como.
No es necesario usar la directiva, ¡simplemente puede copiar y pegar el código a continuación!
Todavía debe ser muy fácil de usar y la mayoría de la gente nunca se dará cuenta.
La idea proviene del hecho de que podemos cambiar el título de ese diálogo, ocultar archivos y solucionar el nombre de archivo resultante con bastante facilidad.
Es un gran truco seguro, pero tal vez haga el trabajo bien para su uso ...
En este ejemplo, tengo un objeto de cuadro de texto para contener la ruta resultante, pero puede eliminar las líneas relacionadas y usar un valor de retorno si lo desea ...
// 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;
}
Los únicos problemas con este truco son:
- El botón Reconocer aún dice "Guardar" en lugar de algo así como "Seleccionar directorio", pero en un caso como minas, "Guardar" la selección de directorio para que siga funcionando ...
- El campo de entrada todavía dice "Nombre de archivo" en lugar de "Nombre de directorio", pero podemos decir que un directorio es un tipo de archivo ...
- Todavía hay un menú desplegable "Guardar como tipo", pero su valor dice "Directorio (* .this.directory)", y el usuario no puede cambiarlo por otra cosa, funciona para mí ...
La mayoría de las personas no se darán cuenta de esto, aunque definitivamente preferiría usar una forma oficial de WPF si microsoft sacara sus cabezas de sus traseros, pero hasta que lo hagan, esa es mi solución temporal.