Windows 7 公共文件夹对话框
在Windows 7 中有些我们经常使用的库(Libraries),例如:音乐库、文档库、视频库、图片库等。还有几十个系统已知文件夹(Known Folders),System、Windows、My Music等。本篇将介绍如何通过Windows API Code Pack 在应用程序中调用这些公共文件夹。将Microsoft.WindowsAPICodePack.dll、Microsoft.WindowsAPICodePack.Shell.dll 加入项目中,编写如下XAML 代码,两个 用来显示Known Folders 和Libraries 选项。
在C# 中加入如下命名空间,Shell 用于支持加载公共文件夹,Dialogs用于调用文件夹对话框。
using Microsoft.WindowsAPICodePack.Shell;
using Microsoft.WindowsAPICodePack.Dialogs;
接下了编写一个ComboBox 加载方法填充上面提到的两个 内容,通过IKnownFolder 接口获取所有KnownFolders 类中的系统已知文件夹。
private void LoadCombox()
{
knowFolders.Items.Clear();
foreach (IKnownFolder kf in KnownFolders.All)
{
if (kf != null && kf.CanonicalName != null)
{
knowFolders.Items.Add(kf.CanonicalName);
}
}
if (knowFolders.Items.Count > 0)
{
SortDescription kfSort = new SortDescription();
knowFolders.Items.SortDescriptions.Add(kfSort);
knowFolders.SelectedIndex = 0;
}
libraries.Items.Clear();
libraries.Items.Add("Documents");
libraries.Items.Add("Music");
libraries.Items.Add("Pictures");
libraries.Items.Add("Videos");
libraries.SelectedIndex = 0;
}
Known Foloder “Open Dialog” 按钮Click 事件,通过CommonOpenFileDialog 类创建对话框,将KnowFolder 初始化为ShellContainer。
private void openKF_Click(object sender, RoutedEventArgs e)
{
CommonOpenFileDialog cfd = new CommonOpenFileDialog();
string kfString = knowFolders.SelectedItem as string;
IKnownFolder kf = KnownFolderHelper.FromCanonicalName(kfString);
cfd.InitialDirectoryShellContainer = kf as ShellContainer;
cfd.ShowDialog();
}
Libraries “Open Dialog” 按钮Click 事件:
private void openLB_Click(object sender, RoutedEventArgs e)
{
string selection = libraries.SelectedItem as string;
ShellContainer selectedFolder = null;
switch (selection)
{
case "Documents":
selectedFolder = KnownFolders.DocumentsLibrary as ShellContainer;
break;
case "Music":
selectedFolder = KnownFolders.MusicLibrary as ShellContainer;
break;
case "Pictures":
selectedFolder = KnownFolders.PicturesLibrary as ShellContainer;
break;
case "Videos":
selectedFolder = KnownFolders.VideosLibrary as ShellContainer;
break;
}
CommonOpenFileDialog cfd = new CommonOpenFileDialog();
cfd.EnsureReadOnly = true;
cfd.InitialDirectoryShellContainer = selectedFolder;
cfd.ShowDialog();
}
编译测试:
源代码
CommonFileDialog.zip
页:
[1]