我有一个WPF(Prism)应用程序需要"选择目录"功能。主窗口的菜单会打开一个孩子"设置"窗口通过臭名昭着的棱镜InteractionRequest
。那"设置"窗口有一个按钮,用于打开"选择目录"窗口。
由于标准FolderBrowserDialog
对话非常难看,我尝试使用Windows API Code Pack中的CommonOpenFileDialog
。
我使用来自Orc.Controls
的服务来包装对话框:
using Microsoft.WindowsAPICodePack.Dialogs;
public class MicrosoftApiSelectDirectoryService : ISelectDirectoryService
{
public bool DetermineDirectory()
{
var browserDialog = new CommonOpenFileDialog();
browserDialog.IsFolderPicker = true;
browserDialog.Title = Title;
browserDialog.InitialDirectory = InitialDirectory;
if (browserDialog.ShowDialog() == CommonFileDialogResult.Ok)
{
DirectoryName = browserDialog.FileName;
return true;
}
DirectoryName = string.Empty;
return false;
}
// ...
}
在我的观看模型中,我致电_selectDirectoryService.DetermineDirectory()
:
public DelegateCommand SelectDirectoryCommand { get; private set; }
private void SelectDirectory()
{
if (_selectDirectoryService.DetermineDirectory())
{
var dir = _selectDirectoryService.DirectoryName;
// ...
}
}
问题是,在CommonOpenFileDialog
中选择目录后,"设置"窗口失去焦点(并且出于某种原因实际隐藏在最大化的主窗口后面)。相比之下,FolderBrowserDialog
将焦点返回到"设置"窗口。
所以,基本上我需要一个更好的"选择目录"实施或我需要找到一种方法来关注"设置"窗口再次没有严重违反MVVM模式。任何想法都将不胜感激。
答案 0 :(得分:0)
您必须设置窗口的父级/拥有者,以防止它突然弹出窗口。