El tutorial o código que encontrarás en este artículo es la resolución más fácil y válida que encontramos a esta inquietud o dilema.
Solución:
Windows Presentation Foundation 4.5 Cookbook de Pavel Yosifovich en la página 155 en la sección sobre “Uso de los cuadros de diálogo comunes” dice:
“¿Qué pasa con la selección de carpetas (en lugar de archivos)? WPF OpenFileDialog no admite eso. Una solución es usar la clase FolderBrowseDialog de Windows Forms. Otra buena solución es usar el paquete de códigos API de Windows que se describe en breve”.
Descargué el paquete de código API de Paquete de código API de Windows® para Microsoft® .NET FrameworkPaquete de código API de Windows: ¿dónde está?, luego agregué referencias a Microsoft.WindowsAPICodePack.dll y Microsoft.WindowsAPICodePack.Shell.dll a mi proyecto WPF 4.5.
Ejemplo:
using Microsoft.WindowsAPICodePack.Dialogs;
var dlg = new CommonOpenFileDialog();
dlg.Title = "My Title";
dlg.IsFolderPicker = true;
dlg.InitialDirectory = currentDirectory;
dlg.AddToMostRecentlyUsedList = false;
dlg.AllowNonFileSystemItems = false;
dlg.DefaultDirectory = currentDirectory;
dlg.EnsureFileExists = true;
dlg.EnsurePathExists = true;
dlg.EnsureReadOnly = false;
dlg.EnsureValidNames = true;
dlg.Multiselect = false;
dlg.ShowPlacesList = true;
if (dlg.ShowDialog() == CommonFileDialogResult.Ok)
var folder = dlg.FileName;
// Do something with selected folder string
Escribí sobre esto en mi blog hace mucho tiempo, el soporte de WPF para los diálogos de archivos comunes es realmente malo (o al menos estaba en 3.5, no verifiqué en la versión 4), pero es fácil solucionarlo.
Debe agregar el manifiesto correcto a su aplicación, que le dará cuadros de mensaje de estilo moderno y un navegador de carpetas (WinForms FolderBrowserDialog), pero no diálogos para abrir/guardar archivos WPF, esto se describe en esas 3 publicaciones (si no le importa sobre la explicación y solo quiero que la solución pase directamente a la 3ra):
- ¿Por qué obtengo cuadros de diálogo y mensajes de archivo de estilo antiguo con WPF?
- ¿La configuración de un manifiesto resolverá mis problemas de estilo de cuadro de mensaje de WPF?
- El manifiesto de aplicación necesario para los cuadros de diálogo y mensajes de archivo de estilo XP y Vista con WPF
Afortunadamente, los diálogos de abrir/guardar son envoltorios muy delgados alrededor de la API de Win32 que es fácil de llamar con las banderas correctas para obtener el estilo de Vista/7 (después de configurar el manifiesto)
- Abrir y guardar cuadros de diálogo de estilo Vista con WPF (sin usar la muestra del puente de Vista)
Agregue el paquete de código API de Windows-Shell a su proyecto
using Microsoft.WindowsAPICodePack.Dialogs;
...
var dialog = new CommonOpenFileDialog();
dialog.IsFolderPicker = true;
CommonFileDialogResult result = dialog.ShowDialog();
Reseñas y puntuaciones del artículo
Finalizando este artículo puedes encontrar las notas de otros gestores de proyectos, tú además puedes insertar el tuyo si lo deseas.