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 ...
// 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;
}
Les seuls problèmes avec ce hack sont:
- Le bouton Acknowledge dit toujours "Save" au lieu de quelque chose comme "Select directory", mais dans un cas comme les mines, je "Save" la sélection de répertoire pour qu'il fonctionne toujours ...
- Le champ de saisie dit toujours "Nom de fichier" au lieu de "Nom de répertoire", mais on peut dire qu'un répertoire est un type de fichier ...
- Il y a toujours une liste déroulante "Enregistrer sous type", mais sa valeur indique "Répertoire (* .this.directory)", et l'utilisateur ne peut pas le changer pour autre chose, fonctionne pour moi ...
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.