Saya ingin pengguna memilih direktori tempat file yang akan saya hasilkan akan disimpan. Saya tahu bahwa di WPF saya harus menggunakan OpenFileDialog
dari Win32, tetapi sayangnya dialog membutuhkan file yang akan dipilih - tetap terbuka jika saya cukup klik OK tanpa memilih satu. Saya bisa "meretas" fungsionalitas dengan membiarkan pengguna memilih file dan kemudian menghapus jalur untuk mencari tahu di mana direktori itu milik tetapi itu tidak intuitif terbaik. Adakah yang pernah melihat ini dilakukan sebelumnya?
wpf
filesystems
dialog
Alexandra
sumber
sumber
Jawaban:
Anda dapat menggunakan kelas FolderBrowserDialog bawaan untuk ini. Jangan pedulikan itu di
System.Windows.Forms
namespace.Jika Anda ingin jendela menjadi modal di atas beberapa jendela WPF, lihat pertanyaan Cara menggunakan FolderBrowserDialog dari aplikasi WPF .
EDIT: Jika Anda menginginkan sesuatu yang sedikit lebih mewah daripada Windows Forms FolderBrowserDialog yang jelek, ada beberapa alternatif yang memungkinkan Anda untuk menggunakan dialog Vista sebagai gantinya:
The API Windows Kode Pack-Shell :
Perhatikan bahwa dialog ini tidak tersedia pada sistem operasi yang lebih tua dari Windows Vista, jadi pastikan untuk memeriksa
CommonFileDialog.IsPlatformSupported
terlebih dahulu.sumber
CommonOpenFileDialog
dari yangWindowsAPICodePack
Anda butuhkanInstall-Package WindowsAPICodePack-Shell
. Tautan yang disediakan dalam jawaban tidak mencantumkan itu.Saya membuat UserControl yang digunakan seperti ini:
Sumber xaml terlihat seperti ini:
dan kode di belakang
sumber
be.UpdateSource
? Tidakkah seharusnya mengubah pemberitahuan otomatis di properti ketergantungan?Saya menggunakan dialog Ookii untuk sementara waktu dan itu berfungsi baik untuk WPF.
Inilah halaman langsung:
http://www.ookii.org/Blog/new_download_ookiidialogs
sumber
Dialog folder Ookii dapat ditemukan di Nuget.
PM> Install-Package Ookii.Dialogs
Dan, contoh kode adalah seperti di bawah ini.
sumber
Bagi mereka yang tidak ingin membuat dialog khusus tetapi masih lebih suka cara WPF 100% dan tidak ingin menggunakan DDL terpisah, dependensi tambahan atau API usang, saya datang dengan hack yang sangat sederhana menggunakan dialog Save As.
Tidak perlu menggunakan arahan, Anda cukup menyalin-tempel kode di bawah ini!
Itu harus tetap sangat ramah pengguna dan kebanyakan orang tidak akan pernah menyadarinya.
Idenya berasal dari fakta bahwa kita dapat mengubah judul dialog itu, menyembunyikan file, dan mengerjakan sekitar nama file yang dihasilkan dengan cukup mudah.
Ini adalah peretasan besar, tapi mungkin itu akan melakukan pekerjaan dengan baik untuk penggunaan Anda ...
Dalam contoh ini saya memiliki objek kotak teks untuk berisi jalur yang dihasilkan, tetapi Anda dapat menghapus baris terkait dan menggunakan nilai balik jika Anda ingin ...
Satu-satunya masalah dengan peretasan ini adalah:
Kebanyakan orang tidak akan memperhatikan ini, walaupun saya pasti akan lebih suka menggunakan cara WPF resmi jika microsoft akan mengeluarkan pikiran mereka, tetapi sampai mereka melakukannya, itu adalah perbaikan sementara saya.
sumber
Untuk Direktori Dialog untuk mendapatkan Jalur Direktori, Pertama Tambahkan Sistem referensi.Windows.Forms, dan kemudian Selesaikan, kemudian masukkan kode ini dalam sebuah tombol klik.
(folderpathTB adalah nama TextBox di mana saya ingin meletakkan path folder, ATAU Anda dapat menetapkannya ke variabel string juga yaitu)
Dan jika Anda ingin mendapatkan Nama File / path, Cukup lakukan ini pada Tombol Klik
(folderpathTB adalah nama TextBox tempat saya meletakkan path file, ATAU Anda dapat menetapkannya ke variabel string juga)
Catatan: Untuk Dialog Folder, System.Windows.Forms.dll harus ditambahkan ke proyek, jika tidak maka tidak akan berfungsi.
sumber
Saya menemukan kode di bawah ini di tautan di bawah ... dan berfungsi Pilih dialog folder WPF
sumber
Cara terbaik untuk mencapai apa yang Anda inginkan adalah membuat kontrol berbasis wpf Anda sendiri, atau menggunakan kontrol yang dibuat oleh orang lain
mengapa? karena akan ada dampak kinerja yang nyata ketika menggunakan dialog winforms dalam aplikasi wpf (karena alasan tertentu)
saya merekomendasikan proyek ini
https://opendialog.codeplex.com/
atau Nuget:
itu sangat ramah MVVM dan tidak membungkus dialog winforms
sumber
Saya sarankan, untuk menambahkan paket nugget:
Maka cara untuk menggunakannya adalah:
Berikut dokumentasinya: http://opendialog.codeplex.com/documentation
Bekerja untuk File, file dengan filter, folder, dll
sumber
Ookii
VistaFolderBrowserDialog
adalah yang Anda inginkan.Jika Anda hanya ingin Browser Folder dari Ooki Dialogs dan tidak ada yang lain kemudian unduh Source , cherry-pick file yang Anda butuhkan untuk browser Folder (petunjuk: 7 file) dan itu dibangun dengan baik di .NET 4.5.2. Saya harus menambahkan referensi ke
System.Drawing
. Bandingkan referensi dalam proyek asli dengan milik Anda.Bagaimana Anda mengetahui file yang mana? Buka aplikasi dan Ookii Anda dalam berbagai contoh Visual Studio. Tambahkan
VistaFolderBrowserDialog.cs
ke aplikasi Anda dan terus menambahkan file sampai kesalahan build hilang. Anda menemukan dependensi dalam proyek Ookii - Control-Klik yang Anda ingin ikuti kembali ke sumbernya (pun intended).Berikut adalah file yang Anda butuhkan jika Anda terlalu malas untuk melakukannya ...
Edit baris 197 in
VistaFolderBrowserDialog.cs
kecuali jika Anda ingin memasukkannyaResources.Resx
melempar InvalidOperationException baru (Properties.Resources.FolderBrowserDialogNoRootFolder);Tambahkan pemberitahuan hak cipta mereka ke aplikasi Anda sesuai milik mereka
license.txt
Kode di
\Ookii.Dialogs.Wpf.Sample\MainWindow.xaml.cs
baris 160-169 adalah contoh yang dapat Anda gunakan tetapi Anda harus menghapusthis,
dariMessageBox.Show(this,
untuk WPF.Bekerja pada Mesin Saya [TM]
sumber
Saya tahu ini adalah pertanyaan lama, tetapi cara sederhana untuk melakukannya adalah menggunakan opsi FileDialog yang disediakan oleh WPF dan menggunakan System.IO.Path.GetDirectory (nama file).
sumber
Tidak satu pun dari jawaban ini yang berhasil untuk saya (umumnya ada referensi yang hilang atau sesuatu di sepanjang baris tersebut)
Tapi ini cukup sederhana:
Menggunakan FolderBrowserDialog dalam aplikasi WPF
Tambahkan referensi ke
System.Windows.Forms
dan gunakan kode ini:Tidak perlu melacak paket yang hilang. Atau tambahkan kelas besar
Ini memberi saya pemilih folder modern yang juga memungkinkan Anda membuat folder baru
Saya belum melihat dampaknya ketika dikerahkan ke mesin lain
sumber
Anda dapat menggunakan sesuatu seperti ini di WPF. Saya telah membuat metode contoh. Periksa di bawah.
sumber