可从此处下载适用于 Microsoft 的 Windows API 代码包。这是一个非常好的图书馆,它有很好的例子。例如,如果我打开来自下载代码包的 zip 中的解决方案 WindowsAPICodePack10(它只包含我添加的 win 表单和 wpf 应用程序的库)
然后我可以非常轻松地使用该库,例如在我可以拖动的 wpf 应用程序中:
ExplorerBrowser 用户控件(注意我必须添加对解决方案附带的库的引用)
然后使用一个按钮,我可以使用以下代码行填充该控件:
// Create a new CommonOpenFileDialog to allow users to select a folder/library
CommonOpenFileDialog cfd = new CommonOpenFileDialog();
// Set options to allow libraries and non filesystem items to be selected
cfd.IsFolderPicker = true;
cfd.AllowNonFileSystemItems = true;
// Show the dialog
CommonFileDialogResult result = cfd.ShowDialog();
// if the user didn't cancel
if (result == CommonFileDialogResult.Ok)
{
// Update the location on the ExplorerBrowser
ShellObject resultItem = cfd.FileAsShellObject;
explorerBrowser1.NavigationTarget = resultItem;
//explorerBrowser1.Navigate(resultItem);
}
之后我可以拥有类似的东西:
这太棒了,但我不了解微软。如果他们为您提供这些库,他们应该可以轻松自定义该用户控件。我下载这些库的原因是因为我需要将特定目录中的文件放在堆栈面板上,并且能够具有与资源管理器上的文件相同的功能(能够拖动文件,右键单击文件时获取上下文菜单,将文件拖放到该容器等)
无论如何,我不需要所有这些功能。从研究库我认为用户控件包含一个 ShellContainer 对象,它的子对象可能是 ShellFiles。
因此,我想从这个库中创建一个 ShellFile 对象并将其放置在 StackPanel 中。在对库进行了乏味的研究之后,我终于找到了如何从 shellFile 实例化一个对象(ShellFile 类是抽象的):
string filename = @"C:\Program Files (x86)\FileZilla FTP Client\filezilla.exe"; \\random file
ShellFile shellFile = ShellFile.FromFilePath(filename);
现在,如果我可以将该文件放入容器中,那就太好了。我无法实例化 ShellConteiner 对象,因为它也是抽象的。例如,我将如何将该 shell 文件放在画布上?
或者我可以提取我需要的属性并创建一个代表 shellFile 的用户控件。我知道如何获取缩略图,我可以执行以下操作:
string filename = @"C:\Program Files (x86)\FileZilla FTP Client\filezilla.exe";
ShellFile shellFile = ShellFile.FromFilePath(filename);
System.Drawing.Bitmap btm = shellFile.Thumbnail.ExtraLargeBitmap;