可以从here下载适用于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);
}
之后我能够拥有类似的东西:
这太棒了,但我不懂微软。如果他们为您提供这些库,他们应该可以轻松自定义该用户控件。我下载这些库的原因是因为我需要将文件放在stackpanel上的特定目录中,并且能够使用与explorer上的文件相同的功能(能够拖动文件,在右键单击文件时获取上下文菜单,将文件丢弃到该容器等)
无论如何我不需要所有的功能。从studing库我认为用户控件包含一个ShellContainer对象,它的childern可能是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;