Ich möchte, dass der Benutzer ein Verzeichnis auswählt, in dem eine Datei gespeichert wird, die ich dann generieren werde. Ich weiß, dass ich in WPF das OpenFileDialog
von Win32 verwenden sollte, aber leider müssen für den Dialog Dateien ausgewählt werden - es bleibt geöffnet, wenn ich einfach auf OK klicke, ohne eine auszuwählen. Ich könnte die Funktionalität "hacken", indem ich den Benutzer eine Datei auswählen und dann den Pfad entfernen lasse, um herauszufinden, zu welchem Verzeichnis sie gehört, aber das ist bestenfalls nicht intuitiv. Hat jemand das schon einmal gesehen?
wpf
filesystems
dialog
Alexandra
quelle
quelle
Antworten:
Sie können hierfür die integrierte FolderBrowserDialog- Klasse verwenden. Es macht nichts, dass es im
System.Windows.Forms
Namespace ist.Wenn Sie möchten, dass das Fenster über ein WPF-Fenster modal ist, lesen Sie die Frage So verwenden Sie einen FolderBrowserDialog aus einer WPF-Anwendung .
BEARBEITEN: Wenn Sie etwas ausgefalleneres als den einfachen, hässlichen Windows Forms FolderBrowserDialog möchten, gibt es einige Alternativen, mit denen Sie stattdessen das Vista-Dialogfeld verwenden können:
Die Windows API Code Pack-Shell :
Beachten Sie, dass dieses Dialogfeld unter Betriebssystemen, die älter als Windows Vista sind, nicht verfügbar ist. Überprüfen Sie dies daher
CommonFileDialog.IsPlatformSupported
zuerst.quelle
CommonOpenFileDialog
vonWindowsAPICodePack
müssenInstall-Package WindowsAPICodePack-Shell
. Der in der Antwort angegebene Link listet das nicht auf.Ich habe ein UserControl erstellt, das wie folgt verwendet wird:
Die xaml-Quelle sieht folgendermaßen aus:
und der Code-Behind
quelle
be.UpdateSource
? Sollten Änderungsbenachrichtigungen in Abhängigkeitseigenschaften nicht automatisch geändert werden?Ich benutze Ookii-Dialoge für eine Weile und es funktioniert gut für WPF.
Hier ist die direkte Seite:
http://www.ookii.org/Blog/new_download_ookiidialogs
quelle
Das Ookii-Ordner-Dialogfeld finden Sie bei Nuget.
PM> Install-Package Ookii.Dialogs
Der Beispielcode lautet wie folgt.
quelle
Für diejenigen, die kein benutzerdefiniertes Dialogfeld erstellen möchten, aber dennoch eine 100% WPF-Methode bevorzugen und keine separaten DDLs, zusätzlichen Abhängigkeiten oder veralteten APIs verwenden möchten, habe ich mithilfe des Dialogfelds Speichern unter einen sehr einfachen Hack entwickelt.
Keine Verwendung der Direktive erforderlich, Sie können einfach den folgenden Code kopieren und einfügen!
Es sollte immer noch sehr benutzerfreundlich sein und die meisten Leute werden es nie bemerken.
Die Idee kommt von der Tatsache, dass wir den Titel dieses Dialogfelds ändern, Dateien ausblenden und den resultierenden Dateinamen ganz einfach umgehen können.
Es ist sicher ein großer Hack, aber vielleicht macht es den Job gut für Ihren Gebrauch ...
In diesem Beispiel habe ich ein Textfeldobjekt, das den resultierenden Pfad enthält, aber Sie können die zugehörigen Zeilen entfernen und einen Rückgabewert verwenden, wenn Sie möchten ...
Die einzigen Probleme mit diesem Hack sind:
Die meisten Leute werden dies nicht bemerken, obwohl ich es definitiv vorziehen würde, einen offiziellen WPF-Weg zu verwenden, wenn Microsoft ihre Köpfe aus ihren Ärschen bekommen würde, aber bis sie es tun, ist das meine vorübergehende Lösung.
quelle
Damit der Verzeichnisdialog den Verzeichnispfad erhält, fügen Sie zuerst die Referenz System.Windows.Forms hinzu, klicken Sie dann auf Auflösen und fügen Sie diesen Code mit einem Klick auf eine Schaltfläche ein.
(folderpathTB ist der Name der TextBox, in die ich den Ordnerpfad einfügen möchte, ODER Sie können ihn auch einer Zeichenfolgenvariablen zuweisen, z.
Und wenn Sie Dateinamen / Pfad erhalten möchten, tun Sie dies einfach auf Button Click
(folderpathTB ist der Name der TextBox, in die ich den Dateipfad einfügen möchte, ODER Sie können ihn auch einer Zeichenfolgenvariablen zuweisen.)
Hinweis: Für den Ordner-Dialog muss die System.Windows.Forms.dll zum Projekt hinzugefügt werden, sonst würde es nicht funktionieren.
quelle
Ich habe den folgenden Code unter dem folgenden Link gefunden ... und es hat funktioniert. Ordner-Dialog WPF auswählen
quelle
Der beste Weg, um das zu erreichen, was Sie wollen, besteht darin, ein eigenes wpf-basiertes Steuerelement zu erstellen oder ein Steuerelement zu verwenden, das von anderen Personen erstellt wurde.
Warum? Da sich die Verwendung des Winforms-Dialogfelds in einer wpf-Anwendung (aus irgendeinem Grund) spürbar auf die Leistung auswirkt,
empfehle ich dieses Projekt
https://opendialog.codeplex.com/
oder Nuget:
Es ist sehr MVVM-freundlich und umschließt den Winforms-Dialog nicht
quelle
Ich würde vorschlagen, das Nugget-Paket hinzuzufügen:
Dann ist die Art und Weise, wie man es benutzt:
Hier ist die Dokumentation: http://opendialog.codeplex.com/documentation
Funktioniert für Dateien, Dateien mit Filter, Ordner usw.
quelle
Der Ookii
VistaFolderBrowserDialog
ist der, den Sie wollen.Wenn Sie nur den Ordner-Browser von Ooki Dialogs und nichts anderes möchten, dann laden Sie die Quelle herunter , wählen Sie die Dateien aus, die Sie für den Ordner-Browser benötigen (Hinweis: 7 Dateien), und es wird in .NET 4.5.2 einwandfrei erstellt. Ich musste einen Verweis auf hinzufügen
System.Drawing
. Vergleichen Sie die Referenzen im Originalprojekt mit Ihren.Wie finden Sie heraus, welche Dateien? Öffnen Sie Ihre App und Ookii in verschiedenen Visual Studio-Instanzen. Fügen Sie
VistaFolderBrowserDialog.cs
Ihrer App hinzu und fügen Sie weitere Dateien hinzu, bis die Erstellungsfehler behoben sind. Sie finden die Abhängigkeiten im Ookii-Projekt - Strg-Klicken Sie auf diejenige, der Sie folgen möchten, um zur Quelle zurückzukehren (Wortspiel beabsichtigt).Hier sind die Dateien, die Sie benötigen, wenn Sie zu faul sind, um das zu tun ...
Bearbeiten Sie Zeile 197 in, es
VistaFolderBrowserDialog.cs
sei denn, Sie möchten deren einschließenResources.Resx
neue InvalidOperationException auslösen (Properties.Resources.FolderBrowserDialogNoRootFolder);Fügen Sie ihrer App den Copyright-Hinweis gemäß ihrer
license.txt
Der Code in
\Ookii.Dialogs.Wpf.Sample\MainWindow.xaml.cs
Zeile 160 bis 169 ist ein Beispiel , das Sie verwenden können , aber Sie werden entfernen , müssenthis,
ausMessageBox.Show(this,
für WPF.Funktioniert auf meiner Maschine [TM]
quelle
Ich weiß, dass dies eine alte Frage ist, aber eine einfache Möglichkeit, dies zu tun, besteht darin, die von WPF bereitgestellte Option FileDialog und System.IO.Path.GetDirectory (Dateiname) zu verwenden.
quelle
Keine dieser Antworten hat bei mir funktioniert (im Allgemeinen fehlte eine Referenz oder etwas in dieser Richtung).
Aber das tat ganz einfach:
Verwenden von FolderBrowserDialog in der WPF-Anwendung
Fügen Sie einen Verweis auf
System.Windows.Forms
diesen Code hinzu und verwenden Sie ihn:Fehlende Pakete müssen nicht aufgespürt werden. Oder fügen Sie enorme Klassen hinzu
Dies gibt mir eine moderne Ordnerauswahl, mit der Sie auch einen neuen Ordner erstellen können
Ich habe noch keine Auswirkungen auf die Bereitstellung auf anderen Computern
quelle
Sie könnten so etwas in WPF verwenden. Ich habe eine Beispielmethode erstellt. Überprüfen Sie unten.
quelle