Quiero que el usuario seleccione un directorio donde se guardará un archivo que luego generaré. Sé que en WPF debería usar OpenFileDialog
Win32, pero desafortunadamente el cuadro de diálogo requiere que se seleccionen los archivos: permanece abierto si simplemente hago clic en Aceptar sin elegir uno. Podría "hackear" la funcionalidad permitiendo que el usuario elija un archivo y luego elimine la ruta para descubrir a qué directorio pertenece, pero eso no es intuitivo en el mejor de los casos. ¿Alguien ha visto esto hecho antes?
wpf
filesystems
dialog
Alexandra
fuente
fuente
Respuestas:
Puede usar la clase FolderBrowserDialog incorporada para esto. No importa que esté en el
System.Windows.Forms
espacio de nombres.Si desea que la ventana sea modal sobre alguna ventana de WPF, consulte la pregunta Cómo usar un FolderBrowserDialog desde una aplicación WPF .
EDITAR: Si desea algo un poco más elegante que el simple y feo Windows Forms FolderBrowserDialog, hay algunas alternativas que le permiten usar el diálogo de Vista en su lugar:
El API Code Pack-Shell de Windows :
Tenga en cuenta que este cuadro de diálogo no está disponible en sistemas operativos anteriores a Windows Vista, así que asegúrese de verificarlo
CommonFileDialog.IsPlatformSupported
primero.fuente
CommonOpenFileDialog
deWindowsAPICodePack
lo que necesitaInstall-Package WindowsAPICodePack-Shell
. El enlace proporcionado en la respuesta no enumera eso.Creé un UserControl que se usa así:
La fuente de xaml se ve así:
y el código subyacente
fuente
be.UpdateSource
? ¿Las notificaciones de cambio no deberían ser automáticas en las propiedades de dependencia?Estoy usando los cuadros de diálogo de Ookii por un tiempo y funciona bien para WPF.
Aquí está la página directa:
http://www.ookii.org/Blog/new_download_ookiidialogs
fuente
El diálogo de la carpeta Ookii se puede encontrar en Nuget.
PM> Install-Package Ookii.Dialogs
Y, el código de ejemplo es el siguiente.
fuente
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 ...
Los únicos problemas con este truco son:
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.
fuente
Para que Directory Dialog obtenga la ruta del directorio, primero agregue la referencia System.Windows.Forms, y luego Resolver, y luego coloque este código haciendo clic en un botón.
(folderpathTB es el nombre de TextBox donde quiero colocar la ruta de la carpeta, O también puede asignarla a una variable de cadena, es decir)
Y si desea obtener FileName / path, simplemente haga esto al hacer clic en el botón
(folderpathTB es el nombre de TextBox donde quiero colocar la ruta del archivo, O también puede asignarlo a una variable de cadena)
Nota: Para el cuadro de diálogo Carpeta, System.Windows.Forms.dll debe agregarse al proyecto, de lo contrario no funcionaría.
fuente
Encontré el código a continuación en el siguiente enlace ... y funcionó Seleccionar carpeta diálogo WPF
fuente
La mejor manera de lograr lo que desea es crear su propio control basado en wpf, o utilizar uno que haya sido creado por otras personas
¿ por qué? porque habrá un impacto notable en el rendimiento al usar el diálogo winforms en una aplicación wpf (por alguna razón)
recomiendo este proyecto
https://opendialog.codeplex.com/
o Nuget:
es muy amigable con MVVM y no está envolviendo el diálogo de winforms
fuente
Sugeriría, para agregar en el paquete de pepitas:
Entonces la forma de usarlo es:
Aquí está la documentación: http://opendialog.codeplex.com/documentation
Funciona para archivos, archivos con filtro, carpetas, etc.
fuente
El Ookii
VistaFolderBrowserDialog
es el que quieres.Si solo desea el explorador de carpetas de Ooki Dialogs y nada más, descargue la fuente , seleccione los archivos que necesita para el explorador de carpetas (sugerencia: 7 archivos) y se compila bien en .NET 4.5.2. Tuve que agregar una referencia a
System.Drawing
. Compare las referencias en el proyecto original con las suyas.¿Cómo averiguar qué archivos? Abra su aplicación y Ookii en diferentes instancias de Visual Studio. Agregue
VistaFolderBrowserDialog.cs
a su aplicación y siga agregando archivos hasta que desaparezcan los errores de compilación. Encontrará las dependencias en el proyecto Ookii: presione Control y haga clic en el que desea seguir hasta su origen (juego de palabras).Aquí están los archivos que necesita si es demasiado vago para hacer eso ...
Edite la línea 197 a
VistaFolderBrowserDialog.cs
menos que desee incluir suResources.Resx
lanzar una nueva InvalidOperationException (Properties.Resources.FolderBrowserDialogNoRootFolder);Agregue su aviso de copyright a su aplicación según su
license.txt
El código en
\Ookii.Dialogs.Wpf.Sample\MainWindow.xaml.cs
línea de 160 a 169 es un ejemplo que puede utilizar, pero que tendrá que eliminarthis,
a partirMessageBox.Show(this,
de WPF.Funciona en mi máquina [TM]
fuente
Sé que esta es una pregunta antigua, pero una forma simple de hacerlo es usar la opción FileDialog proporcionada por WPF y usar System.IO.Path.GetDirectory (nombre de archivo).
fuente
Ninguna de estas respuestas funcionó para mí (generalmente faltaba una referencia o algo por el estilo)
Pero esto simplemente hizo:
Usando FolderBrowserDialog en la aplicación WPF
Agregue una referencia
System.Windows.Forms
y use este código:No es necesario localizar paquetes perdidos. O agrega clases enormes
Esto me da un selector de carpeta moderno que también te permite crear una nueva carpeta
Todavía tengo que ver el impacto cuando se implementa en otras máquinas
fuente
Podrías usar algo así en WPF. He creado un método de ejemplo. Verifique a continuación.
fuente