Я хочу, чтобы пользователь выбрал каталог, в который будет сохранен файл, который я сгенерирую. Я знаю, что в WPF я должен использовать OpenFileDialog
Win32, но, к сожалению, диалог требует выбора файла (ов) - он остается открытым, если я просто нажму OK, не выбрав один. Я мог бы «взломать» функциональность, позволив пользователю выбрать файл, а затем лишить путь, чтобы выяснить, к какому каталогу он принадлежит, но в лучшем случае он не интуитивно понятен. Кто-нибудь видел это сделано раньше?
wpf
filesystems
dialog
Александра
источник
источник
Ответы:
Для этого вы можете использовать встроенный класс FolderBrowserDialog . Не против того, что это в
System.Windows.Forms
пространстве имен.Если вы хотите, чтобы окно было модальным по сравнению с некоторым окном WPF, см. Вопрос « Как использовать FolderBrowserDialog из приложения WPF» .
РЕДАКТИРОВАТЬ: Если вы хотите что-то более причудливое, чем простая, уродливая Windows Forms FolderBrowserDialog, есть несколько альтернатив, которые позволяют использовать вместо этого диалог Vista:
Windows API Code Pack-Shell :
Обратите внимание, что это диалоговое окно недоступно в операционных системах, более старых, чем Windows Vista, поэтому обязательно проверьте
CommonFileDialog.IsPlatformSupported
сначала.источник
CommonOpenFileDialog
отWindowsAPICodePack
вас нужноInstall-Package WindowsAPICodePack-Shell
. Ссылка в ответе не содержит этого.Я создал UserControl, который используется следующим образом:
Исходный код xaml выглядит так:
и код позади
источник
be.UpdateSource
? Разве уведомления об изменениях не должны быть автоматическими в свойствах зависимостей?Я использую диалоги Ookii некоторое время, и это хорошо работает для WPF.
Вот прямая страница:
http://www.ookii.org/Blog/new_download_ookiidialogs
источник
Диалог папки Ookii можно найти на Nuget.
PM> Install-Package Ookii.Dialogs
И пример кода, как показано ниже.
источник
Для тех, кто не хочет создавать настраиваемое диалоговое окно, но все же предпочитает 100% WPF-способ и не хочет использовать отдельные DDL, дополнительные зависимости или устаревшие API-интерфейсы, я предложил очень простой взлом с помощью диалогового окна «Сохранить как».
Нет необходимости в использовании директивы, вы можете просто скопировать код ниже!
Это все еще должно быть очень удобным, и большинство людей никогда не заметят.
Идея заключается в том, что мы можем легко изменить заголовок этого диалога, скрыть файлы и обойти полученное имя файла.
Это большой взлом, но, возможно, он отлично подойдет для вашего использования ...
В этом примере у меня есть объект текстового поля, в котором содержится результирующий путь, но вы можете удалить связанные строки и использовать возвращаемое значение, если хотите ...
Единственные проблемы с этим хаком:
Большинство людей не заметят этого, хотя я бы определенно предпочел использовать официальный способ WPF, если бы Майкрософт вытащил свои головы из задниц, но пока они не заметят, это мое временное исправление.
источник
Чтобы в диалоге каталогов получить путь к каталогу, сначала добавьте ссылку System.Windows.Forms, а затем Resolve, а затем вставьте этот код в нажатие кнопки.
(folderpathTB - это имя TextBox, в которое я хочу поместить путь к папке, ИЛИ вы также можете присвоить его строковой переменной, т.е.)
И если вы хотите получить FileName / path, просто сделайте это при нажатии кнопки
(folderpathTB - это имя TextBox, куда я хочу поместить путь к файлу, ИЛИ вы также можете присвоить его строковой переменной)
Примечание. Для диалога папок в проект необходимо добавить файл System.Windows.Forms.dll, иначе он не будет работать.
источник
Я нашел код ниже по ссылке ниже ... и это сработало. Выберите папку в диалоговом окне WPF.
источник
Лучший способ добиться того, чего вы хотите - это создать свой собственный элемент управления на основе wpf или использовать тот, который был создан другими людьми,
почему? поскольку при использовании диалогового окна winforms в приложении wpf (по какой-то причине) будет заметно снижаться производительность,
я рекомендую этот проект
https://opendialog.codeplex.com/
или Nuget:
он очень дружелюбен к MVVM и не переносит диалог winforms
источник
Я бы предложил добавить в пакет самородков:
Тогда способ использовать это:
Вот документация: http://opendialog.codeplex.com/documentation
Работает для файлов, файлов с фильтром, папок и т. Д.
источник
Ookii
VistaFolderBrowserDialog
- это то, что вы хотите.Если вам нужен только браузер папок из Ooki Dialogs и ничего больше, тогда скачайте Source , выберите нужные вам файлы для браузера Folder (подсказка: 7 файлов), и он прекрасно встраивается в .NET 4.5.2. Я должен был добавить ссылку на
System.Drawing
. Сравните ссылки в оригинальном проекте с вашими.Как вы выясните, какие файлы? Откройте свое приложение и Ookii в разных экземплярах Visual Studio. Добавьте
VistaFolderBrowserDialog.cs
в свое приложение и продолжайте добавлять файлы, пока ошибки сборки не исчезнут. Вы найдете зависимости в проекте Ookii - удерживая нажатой клавишу «Control», щелкните на том, за которым вы хотите вернуться к его источнику (каламбур).Вот файлы, которые вам нужны, если вам лень это делать ...
Отредактируйте строку 197,
VistaFolderBrowserDialog.cs
если вы не хотите включать ихResources.Resx
бросить новое InvalidOperationException (Properties.Resources.FolderBrowserDialogNoRootFolder);Добавьте их уведомление об авторских правах в ваше приложение согласно их
license.txt
Код в
\Ookii.Dialogs.Wpf.Sample\MainWindow.xaml.cs
строке 160-169 - это пример, который вы можете использовать, но вам нужно удалить егоthis,
изMessageBox.Show(this,
WPF.Работает на моей машине [ТМ]
источник
Я знаю, что это старый вопрос, но простой способ сделать это - использовать опцию FileDialog, предоставленную WPF, и использовать System.IO.Path.GetDirectory (имя файла).
источник
Ни один из этих ответов не работал для меня (как правило, отсутствовала ссылка или что-то в этом роде)
Но это довольно просто:
Использование FolderBrowserDialog в приложении WPF
Добавьте ссылку
System.Windows.Forms
и используйте этот код:Нет необходимости отслеживать пропущенные пакеты. Или добавить огромные классы
Это дает мне современный селектор папок, который также позволяет создавать новые папки
Мне еще предстоит увидеть влияние при развертывании на других машинах
источник
Вы можете использовать что-то подобное в WPF. Я создал пример метода. Проверьте ниже.
источник