在调用
SaveFileDialog
WPF 中的 C#
时,我试图禁用/隐藏“网络”文件夹,并且从我在 SO/Google 上读到的所有内容来看,无法自定义/隐藏/禁用导航窗格完全没有。
但是,我偶然发现了“文件夹选项 > 显示网络”中的一个选项,它允许我隐藏导航窗格中的“网络”链接。有谁知道我需要使用哪个注册表项来切换它?我的计划是在显示对话框之前以编程方式将标志设置为
0
,并在完成后将其恢复到原始状态。
我已经挖掘了以下资源(以及更多资源),但找不到我需要的内容:
隐藏网络快捷方式的原因是因为在VPN环境下访问“网络”会导致C#应用程序崩溃。
又挖掘了几个小时后,我实际上找到了两种替代方案。
解决方案1 - 隐藏导航面板
有2种方法可以隐藏导航面板
WindowsAPICodePack
并将 ShowPlacesList
设置为 false
或FileDialogNative
创建您自己的
HIDEPINNEDPLACES
互操作文件和
SetOptions
示例 1a:
using Microsoft.WindowsAPICodePack.Dialogs;
var dialog = new CommonOpenFileDialog()
{
ShowPlacesList = false
};
示例 1b,要求您复制此 文件,它允许您访问
IFileDialog
,并将其放入您的项目中:
var dialog = (FileDialogNative.IFileSaveDialog) new FileDialogNative.FileSaveDialogRCW();
dialog.SetOptions(FileDialogNative.FOS.FOS_HIDEPINNEDPLACES);
dialog.Show(new WindowInteropHelper(Application.Current.MainWindow).Handle);
使用上述任一实现都会隐藏整个导航面板。但是,请注意,用户仍然可以通过对话框中的地址栏导航...所以这并不是一个真正完美的解决方案,至少对我来说不是,但也许对其他人来说是这样。
解决方案2 - 处理FolderChanging事件
虽然感觉有点“hacky”,但这实际上解决了我原来的问题。您仍然需要安装 NuGet
WindowsAPICodePack
,但您不再需要从文件对话框中隐藏任何内容,只需按原样使用即可。
using Microsoft.WindowsAPICodePack.Dialogs;
var dialog = new CommonOpenFileDialog()
dialog.FolderChanging += (sender, e) =>
{
Log.Debug("FolderChanging");
e.Cancel = true;
};
您可以检查实际选择的路径/文件夹/项目,在下面的屏幕截图中,它显示了单击“网络”快捷方式的时间,通过将
Cancel
设置为 true
,我们可以忽略该选择。
希望这对某人有帮助。