是否可以在 WPF 或 WinForms 窗口中嵌入 Windows 资源管理器文件/文件夹浏览器视图?
我基本上想将文件/文件夹浏览器托管为我的应用程序窗口的一部分。我不想重新实现 shell 提供的功能,尤其是像 TortoiseSVN 这样的 shell 扩展。
据我所知,Windows 窗体和 WPF 中都没有任何现成的文件/文件夹浏览器控件。
然而,有一些商业第三方控件提供类似 Windows 资源管理器的界面来浏览磁盘上的文件和文件夹。看看 LogicNP 的这些产品:
或者,您可以在 WPF 中托管 Windows Forms WebBrowser 控件,并使用它来浏览文件系统,因为它与 Windows shell 集成。
在 XAML 中你可以做这样的事情:
<Window x:Class="Samples.FilesystemBrowser"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
Title="Filesystem Browser">
<StackPanel>
<WindowsFormsHost>
<wf:WebBrowser Url="C:\" />
</WindowsFormsHost>
</StackPanel>
</Window>
请注意,在 .NET 3.5 SP1 中,Microsoft 添加了本机 WPF WebBrowser 控件,因此您可以选择使用它:
<Window x:Class="Samples.FilesystemBrowser"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Filesystem Browser">
<StackPanel>
<WebBrowser Source="C:\" />
</StackPanel>
</Window>
Windows Vista的Shell引入了一个新的控件,它实现了IExplorerBrowser接口;这是在应用程序中托管 Windows Shell 文件系统视图的推荐方法。使用 .NET 构建应用程序的开发人员可以使用 Windows API CodePack for .NET 中提供的 ExplorerBrowser 控件的包装版本。
请注意,此界面仅在 Windows Vista 及更高版本上可用。如果您的应用程序需要在早期的 Windows 版本上运行,您将需要回退到这些平台上的旧 WebOC 实现。
http://msdn.microsoft.com/en-us/library/bb761909(VS.85).aspx http://code.msdn.microsoft.com/WindowsAPICodePack
由于此处描述的 Win7 问题,建议使用此方法来替代托管 Web 浏览器控件:http://blogs.msdn.com/ieinternals/archive/2009/12/30/Windows-7-Web-Browser-Control-will -不浏览文件系统.aspx
我的答案中的方法并不是我一定会推荐的方法,因为它基本上是一个巨大的黑客攻击。然而,几乎可以在另一个应用程序中“托管”任何 Windows 应用程序。注意事项:
基本方法是:
Spy++ 才能弄清楚何时发生什么消息。
是的,这是构建大量非常丑陋且脆弱的代码的好方法,但它(a)有时是让事情正常工作的唯一方法; (b) 非常适合了解 Windows.Forms / MFC / 等底层的情况。