Je veux que l'utilisateur sélectionne un répertoire où sera enregistré un fichier que je générerai ensuite. Je sais que dans WPF, je devrais utiliser OpenFileDialog
Win32, mais malheureusement la boîte de dialogue nécessite la sélection de fichiers - elle reste ouverte si je clique simplement sur OK sans en choisir un. Je pourrais "pirater" la fonctionnalité en laissant l'utilisateur choisir un fichier, puis supprimer le chemin pour déterminer à quel répertoire il appartient, mais cela n'est pas intuitif au mieux. Est-ce que quelqu'un a déjà vu ça?
wpf
filesystems
dialog
Alexandra
la source
la source
Réponses:
Vous pouvez utiliser la classe FolderBrowserDialog intégrée pour cela. Ne vous occupez pas que ce soit dans l'
System.Windows.Forms
espace de noms.Si vous souhaitez que la fenêtre soit modale sur une fenêtre WPF, consultez la question Comment utiliser un FolderBrowserDialog à partir d'une application WPF .
EDIT: Si vous voulez quelque chose d'un peu plus sophistiqué que le FolderBrowserDialog Windows Forms simple et laid, il existe des alternatives qui vous permettent d'utiliser la boîte de dialogue Vista à la place:
Le code API Windows Pack-Shell :
Notez que cette boîte de dialogue n'est pas disponible sur les systèmes d'exploitation antérieurs à Windows Vista, assurez-vous donc de vérifier d'
CommonFileDialog.IsPlatformSupported
abord.la source
CommonOpenFileDialog
partir deWindowsAPICodePack
vous devezInstall-Package WindowsAPICodePack-Shell
. Le lien fourni dans la réponse ne répertorie pas cela.J'ai créé un UserControl qui est utilisé comme ceci:
La source xaml ressemble à ceci:
et le code-behind
la source
be.UpdateSource
? Les notifications de modification ne devraient-elles pas être automatiques dans les propriétés de dépendance?J'utilise des boîtes de dialogue Ookii pendant un certain temps et il fonctionne bien pour WPF.
Voici la page directe:
http://www.ookii.org/Blog/new_download_ookiidialogs
la source
La boîte de dialogue du dossier Ookii se trouve sur Nuget.
PM> Install-Package Ookii.Dialogs
Et, l'exemple de code est comme ci-dessous.
la source
Pour ceux qui ne veulent pas créer une boîte de dialogue personnalisée mais préfèrent toujours une méthode 100% WPF et ne veulent pas utiliser des DDL séparés, des dépendances supplémentaires ou des API obsolètes, j'ai trouvé un hack très simple en utilisant la boîte de dialogue Enregistrer sous.
Aucune directive d'utilisation requise, vous pouvez simplement copier-coller le code ci-dessous!
Il devrait toujours être très convivial et la plupart des gens ne le remarqueront jamais.
L'idée vient du fait que nous pouvons changer le titre de cette boîte de dialogue, masquer les fichiers et contourner le nom de fichier résultant assez facilement.
C'est un gros hack à coup sûr, mais peut-être qu'il fera très bien l'affaire pour votre utilisation ...
Dans cet exemple, j'ai un objet de zone de texte pour contenir le chemin résultant, mais vous pouvez supprimer les lignes associées et utiliser une valeur de retour si vous le souhaitez ...
Les seuls problèmes avec ce hack sont:
La plupart des gens ne les remarqueront pas, même si je préférerais certainement utiliser une méthode officielle WPF si Microsoft sortait la tête de leurs fesses, mais jusqu'à ce qu'ils le fassent, c'est ma solution temporaire.
la source
Pour que la boîte de dialogue de répertoire obtienne le chemin de répertoire, ajoutez d'abord la référence System.Windows.Forms, puis résolvez, puis placez ce code dans un clic de bouton.
(folderpathTB est le nom de TextBox où je veux mettre le chemin du dossier, OU vous pouvez aussi l'affecter à une variable de chaîne, c'est-à-dire)
Et si vous voulez obtenir FileName / path, faites-le simplement sur Button Click
(folderpathTB est le nom de TextBox où je veux mettre le chemin du fichier, OU vous pouvez aussi l'affecter à une variable de chaîne)
Remarque: Pour la boîte de dialogue de dossier, le System.Windows.Forms.dll doit être ajouté au projet, sinon cela ne fonctionnerait pas.
la source
J'ai trouvé le code ci-dessous sur le lien ci-dessous ... et cela a fonctionné Boîte de dialogue Sélectionner un dossier WPF
la source
La meilleure façon d'atteindre ce que vous voulez est de créer votre propre contrôle basé sur wpf, ou d'en utiliser un qui a été créé par d'autres personnes,
pourquoi? car il y aura un impact notable sur les performances lors de l'utilisation de la boîte de dialogue winforms dans une application wpf (pour une raison quelconque)
je recommande ce projet
https://opendialog.codeplex.com/
ou Nuget:
il est très convivial pour MVVM et n'emballe pas la boîte de dialogue Winforms
la source
Je suggère, pour ajouter dans le paquet de pépites:
Ensuite, la façon de l'utiliser est:
Voici la documentation: http://opendialog.codeplex.com/documentation
Fonctionne pour les fichiers, les fichiers avec filtre, les dossiers, etc.
la source
L'Ookii
VistaFolderBrowserDialog
est celui que vous voulez.Si vous ne voulez que le navigateur de dossiers à partir des boîtes de dialogue Ooki et rien d'autre, téléchargez la source , choisissez les fichiers dont vous avez besoin pour le navigateur de dossiers (indice: 7 fichiers) et il se construit correctement dans .NET 4.5.2. J'ai dû ajouter une référence à
System.Drawing
. Comparez les références du projet d'origine aux vôtres.Comment déterminez-vous quels fichiers? Ouvrez votre application et Ookii dans différentes instances de Visual Studio. Ajoutez
VistaFolderBrowserDialog.cs
à votre application et continuez à ajouter des fichiers jusqu'à ce que les erreurs de construction disparaissent. Vous trouverez les dépendances dans le projet Ookii - Contrôle-cliquez sur celui que vous souhaitez suivre jusqu'à sa source (jeu de mots voulu).Voici les fichiers dont vous avez besoin si vous êtes trop paresseux pour le faire ...
Modifiez la ligne 197
VistaFolderBrowserDialog.cs
sauf si vous souhaitez inclure leurResources.Resx
lever une nouvelle InvalidOperationException (Properties.Resources.FolderBrowserDialogNoRootFolder);Ajoutez leur avis de copyright à votre application selon leur
license.txt
Le code de la
\Ookii.Dialogs.Wpf.Sample\MainWindow.xaml.cs
ligne 160-169 est un exemple que vous pouvez utiliser, mais vous devrez supprimerthis,
deMessageBox.Show(this,
pour WPF.Fonctionne sur ma machine [TM]
la source
Je sais que c'est une vieille question, mais un moyen simple de le faire est d'utiliser l'option FileDialog fournie par WPF et d'utiliser System.IO.Path.GetDirectory (nom de fichier).
la source
Aucune de ces réponses n'a fonctionné pour moi (généralement il y avait une référence manquante ou quelque chose dans ce sens)
Mais cela a tout simplement fait:
Utilisation de FolderBrowserDialog dans l'application WPF
Ajoutez une référence
System.Windows.Forms
et utilisez ce code:Pas besoin de retrouver les paquets manquants. Ou ajoutez d'énormes cours
Cela me donne un sélecteur de dossier moderne qui vous permet également de créer un nouveau dossier
Je n'ai pas encore vu l'impact lors du déploiement sur d'autres machines
la source
Vous pouvez utiliser smth comme ceci dans WPF. J'ai créé un exemple de méthode. Vérifiez ci-dessous.
la source