我查看了WPF Frame和WebBrowser控件.不幸的是,它们都只暴露导航事件(导航,导航),但不允许基于请求的URL允许我返回从资源程序集中检索的HTML内容的任何事件.
我可以使用Navigating事件和NavigateToString()方法拦截导航请求并提供HTML内容.但这不适用于拦截图像,CSS文件等的加载调用.
此外,我知道HTML to Flowdocument SDK sample application可能有用,但我可能不得不大幅扩展样本来处理图像和样式表.
对于它的价值,我们还生成要呈现的HTML内容(通过Wiki页面),因此对于所使用的引用图像位置和CSS样式表,源HTML在某种程度上是可预测的(例如,可能没有JavaScript).我们希望从互联网上显示随机HTML内容.
更新:
还可以为每个HTML页面创建一个MHT文件,这样可以将所有图像“内联”为MIME类型,并减少需要进行更细粒度的回调.
解决方法
在BerkeliumSharp测试应用程序(源代码中可用的项目之一)中,您可以看到它的一个特定用途是FileProtocolHandler – 它使用.NET托管类处理“file://”协议的所有文件IO( System.IO).对于像“resource://”这样的组合协议,你可以做同样的事情.实际上只有一种方法需要重写,名为HandleRequest,如下所示:
bool HandleRequest (string url,ref byte[] responseBody,ref string[] responseHeaders)
所以你要使用像“resource:// path / to / my / html”这样的URL,并在该方法中执行所有必要的Assembly.GetResourceStream等.看看如何使用FileProtocolHandler来调整自己的内容应该很容易.
berkelium和berkelium sharp都是开源的,具有BSD许可证.