Quero que o usuário selecione um diretório em que um arquivo que gerarei será salvo. Eu sei que no WPF eu deveria usar o OpenFileDialog
do Win32, mas infelizmente a caixa de diálogo requer que o arquivo seja selecionado - ele permanece aberto se eu simplesmente clicar em OK sem escolher um. Eu poderia "hackear" a funcionalidade, permitindo que o usuário escolhesse um arquivo e depois desviasse o caminho para descobrir a qual diretório ele pertence, mas isso é pouco intuitivo. Alguém já viu isso antes?
wpf
filesystems
dialog
Alexandra
fonte
fonte
Respostas:
Você pode usar a classe FolderBrowserDialog interna para isso. Não importa que esteja no
System.Windows.Forms
espaço para nome.Se você deseja que a janela seja modal sobre alguma janela WPF, consulte a pergunta Como usar um FolderBrowserDialog em um aplicativo WPF .
EDIT: Se você deseja algo um pouco mais sofisticado do que o simples e feio FolderBrowserDialog do Windows Forms, existem algumas alternativas que permitem usar a caixa de diálogo do Vista:
O pacote de códigos da API do Windows :
Observe que esse diálogo não está disponível em sistemas operacionais mais antigos que o Windows Vista, portanto, verifique
CommonFileDialog.IsPlatformSupported
primeiro.fonte
CommonOpenFileDialog
partir deWindowsAPICodePack
você precisaInstall-Package WindowsAPICodePack-Shell
. O link fornecido na resposta não lista isso.Eu criei um UserControl que é usado assim:
A fonte xaml fica assim:
e o code-behind
fonte
be.UpdateSource
? As notificações de alteração não devem ser automáticas nas propriedades da dependência?Estou usando as caixas de diálogo do Ookii por um tempo e funciona bem para o WPF.
Aqui está a página direta:
http://www.ookii.org/Blog/new_download_ookiidialogs
fonte
O diálogo da pasta Ookii pode ser encontrado em Nuget.
PM> Install-Package Ookii.Dialogs
E, o código de exemplo é como abaixo.
fonte
Para aqueles que não desejam criar uma caixa de diálogo personalizada, mas ainda preferem uma maneira 100% WPF e não desejam usar DDLs separadas, dependências adicionais ou APIs desatualizadas, criei um hack muito simples usando a caixa de diálogo Salvar como.
Nenhuma diretiva de uso é necessária, você pode simplesmente copiar e colar o código abaixo!
Ainda deve ser muito fácil de usar e a maioria das pessoas nunca notará.
A idéia vem do fato de podermos alterar o título dessa caixa de diálogo, ocultar arquivos e contornar o nome do arquivo resultante com bastante facilidade.
É um grande truque, com certeza, mas talvez faça o trabalho muito bem para o seu uso ...
Neste exemplo, tenho um objeto de caixa de texto para conter o caminho resultante, mas você pode remover as linhas relacionadas e usar um valor de retorno, se desejar ...
Os únicos problemas com esse hack são:
A maioria das pessoas não notará isso, embora eu definitivamente prefira usar uma maneira oficial do WPF se a Microsoft tirar a cabeça da cabeça, mas até isso acontecer, essa é a minha solução temporária.
fonte
Para a caixa de diálogo Diretório obter o caminho do diretório, primeiro adicione a referência System.Windows.Forms e, em seguida, resolva e, em seguida, coloque esse código em um botão.
(folderpathTB é o nome do TextBox onde eu coloco o caminho da pasta, OU você também pode atribuí-lo a uma variável de string)
E se você deseja obter o FileName / path, basta fazer isso no botão Clique
(folderpathTB é o nome do TextBox onde eu coloco o caminho do arquivo, OU você também pode atribuí-lo a uma variável de string)
Nota: Para o Diálogo de Pastas, o System.Windows.Forms.dll deve ser adicionado ao projeto, caso contrário, não funcionaria.
fonte
Encontrei o código abaixo no link abaixo ... e funcionou Selecionar caixa de diálogo WPF
fonte
A melhor maneira de conseguir o que você deseja é criar seu próprio controle baseado em wpf ou usar um que foi criado por outras pessoas
por que? porque haverá um impacto perceptível no desempenho ao usar a caixa de diálogo winforms em um aplicativo wpf (por algum motivo),
recomendo este projeto
https://opendialog.codeplex.com/
ou Nuget:
é muito amigável ao MVVM e não está envolvendo a caixa de diálogo winforms
fonte
Eu sugiro, para adicionar no pacote nugget:
Então a maneira de usá-lo é:
Aqui está a documentação: http://opendialog.codeplex.com/documentation
Funciona para arquivos, arquivos com filtro, pastas, etc.
fonte
The Ookii
VistaFolderBrowserDialog
é o que você deseja.Se você deseja apenas o Navegador de Pastas da Ooki Dialogs e nada mais, faça o download do Código - fonte , escolha os arquivos necessários para o Navegador de Pastas (dica: 7 arquivos) e ele será compilado no .NET 4.5.2. Eu tive que adicionar uma referência a
System.Drawing
. Compare as referências no projeto original com as suas.Como você descobre quais arquivos? Abra seu aplicativo e o Ookii em diferentes instâncias do Visual Studio. Adicionar
VistaFolderBrowserDialog.cs
ao seu aplicativo e continue adicionando arquivos até os erros de compilação desaparecerem. Você encontra as dependências no projeto Ookii - clique com a tecla Control pressionada na que deseja seguir de volta à sua fonte (trocadilho intencional).Aqui estão os arquivos que você precisa se tiver preguiça de fazer isso ...
Edite a linha 197, a
VistaFolderBrowserDialog.cs
menos que você queira incluirResources.Resx
lança nova InvalidOperationException (Properties.Resources.FolderBrowserDialogNoRootFolder);Adicione o aviso de direitos autorais ao aplicativo, conforme
license.txt
O código na
\Ookii.Dialogs.Wpf.Sample\MainWindow.xaml.cs
linha 160-169 é um exemplo que você pode usar, mas será necessário removerthis,
doMessageBox.Show(this,
WPF.Trabalhos em minha máquina [TM]
fonte
Sei que essa é uma pergunta antiga, mas uma maneira simples de fazer isso é usar a opção FileDialog fornecida pelo WPF e usar System.IO.Path.GetDirectory (nome do arquivo).
fonte
Nenhuma dessas respostas funcionou para mim (geralmente faltava uma referência ou algo nesse sentido)
Mas isso simplesmente fez:
Usando FolderBrowserDialog no aplicativo WPF
Adicione uma referência
System.Windows.Forms
e use este código:Não há necessidade de rastrear pacotes ausentes. Ou adicione classes enormes
Isso me dá um seletor de pastas moderno que também permite criar uma nova pasta
Ainda estou para ver o impacto quando implantado em outras máquinas
fonte
Você poderia usar smth como este no WPF. Eu criei o método de exemplo. Confira abaixo.
fonte