更新时间:2022-01-02 14:41:27
这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序。
播放器普遍都要有个看起来比较酷的外观,于是我就给设计了个不规则形状的带透明边框的外观,如下图:
但这个设计整合到WPF中时,却遇到了一个头疼的BUG:
只要设置窗体为AllowsTransparency="True" WindowStyle="None",内嵌的WebBrowser就无法显示了,但它还不是真的没有了,里面加载的视频还会正常播放、出声,甚至用鼠标去点网页内容还能正常交互,就是啥也看不到。
那么我是如何解决的呢?
经过一系列搜索,我找到了这样的代码:
使用时首先要把这两个文件原封不动的复制到项目中:
然后在你要加载WebBrowser的地方放置一个命名的Border元素:
然后在后台代码中这样设置:
这样你原来的Border的位置就会被载入一个WebBrowser了。
它的原理貌似就是利用一个没有不规则形状及透明新窗体承载WebBrowser,这样就避免了我们之前遇到的灵异问题,然后再通过一些Win32的API调整显示,使我们看起来和整合在一起没有什么分别,最终达成的效果如下:
上述的WebBrowser始终都是指的System.Windows.Controls.WebBrowser,它虽然可以被WPF直接嵌入,但它是一个废柴,相比WinForm中的WebBrowser的功能来说逊色太多了,所以我改动了一下代码,使WebBrowserOverlay类不再承载WebBrowser,而是承载WindowsFormsHost,然后我们可以自行向其中添加我们惯用的System.Windows.Forms.WebBrowser控件,改动后的使用方法变成了这样:
不过你需要知道,这个方法并不是完美的解决办法,而且目前好像还没有完美的办法能够解决此问题,此方法目前已知的问题如下:
目前发现的就这些了,除了第一条比较痛苦,其他的都还好~
http://kimiya25.spaces.live.com/blog/cns!27A083D4FD9435E9!1693.entry?wa=wsignin1.0&sa=675748223
改进的WebBrowserOverlay类:http://cid-0612298d2255e149.skydrive.live.com/self.aspx/.Public/文档/WebBrowserOverlay.rar
PS:播放器可能得过些天才发布:)
PS2:有个关于.Net程序安装的问题向各位英雄求助:http://space.cnblogs.com/question/11103/
本文转自斯克迪亚博客园博客,原文链接:http://www.cnblogs.com/SkyD/archive/2009/12/16/1625216.html,如需转载请自行联系原作者