登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
每日签到
每天签到奖励2圆-6圆
发帖说明
VIP申请
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
VIP申请
VIP网盘
网盘
联系我们
每日签到
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
WPF中不规则窗体与WebBrowser控件的兼容问题解决办法 ...
WPF中不规则窗体与WebBrowser控件的兼容问题解决办法
[ 复制链接 ]
普料飕
2025-5-29 19:55:04
引言
这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序。
播放器普遍都要有个看起来比较酷的外观,于是我就给设计了个不规则形状的带透明边框的外观,如下图:
但这个设计整合到WPF中时,却遇到了一个头疼的BUG:
只要设置窗体为AllowsTransparency="True" Window,内嵌的WebBrowser就无法显示了,但它还不是真的没有了,里面加载的视频还会正常播放、出声,甚至用鼠标去点网页内容还能正常交互,就是啥也看不到。
解决办法
那么我是如何解决的呢?
经过一系列搜索,我找到了这样的代码:
前台XAML文件:http://www.google.cn/codesearch/p?hl=zh-CN#ihfHhUg5N2k/trunk/vs2010/meta/Glu/Helper/WebBrowserOverlay.xaml&q=WebBrowserOnTransparentWindow&d=5
后台CS文件:http://www.google.cn/codesearch/p?hl=zh-CN#ihfHhUg5N2k/trunk/Glu/Helper/WebBrowserOverlay.xaml.cs&q=WebBrowserOnTransparentWindow&d=3
使用时首先要把这两个文件原封不动的复制到项目中:
然后在你要加载WebBrowser的地方放置一个命名的Border元素:
然后在后台代码中这样设置:
这样你原来的Border的位置就会被载入一个WebBrowser了。
它的原理貌似就是利用一个没有不规则形状及透明新窗体承载WebBrowser,这样就避免了我们之前遇到的灵异问题,然后再通过一些Win32的API调整显示,使我们看起来和整合在一起没有什么分别,最终达成的效果如下:
稍加改进
上述的WebBrowser始终都是指的System.Windows.Controls.WebBrowser,它虽然可以被WPF直接嵌入,但它是一个废柴,相比WinForm中的WebBrowser的功能来说逊色太多了,所以我改动了一下代码,使WebBrowserOverlay类不再承载WebBrowser,而是承载WindowsFormsHost,然后我们可以自行向其中添加我们惯用的System.Windows.Forms.WebBrowser控件,改动后的使用方法变成了这样:
缺陷
不过你需要知道,这个方法并不是完美的解决办法,而且目前好像还没有完美的办法能够解决此问题,此方法目前已知的问题如下:
会在程序开始时显示一个大白方块,然后才能正常显示界面。(求解决办法T_T)
使用Windows7的时候,拖动程序到屏幕左、右、上会自动停靠并改变窗体尺寸,这时嵌入的部分是无法跟随窗体大小变化的。(解决办法是强制设定最大、最小宽度和高度。可能有办法更新,但我没有详细测试,并且我的程序不支持拖拉改变大小,所以也没做这方面的测试)
主窗口隐藏时,嵌入部分不会随之隐藏。(解决办法是在隐藏主窗体时把WebBrowserOverlay对象也设为隐藏。我的程序最小化是直接到系统托盘的,所以没测试常规的最小化是否会产生同样的问题)
目前发现的就这些了,除了第一条比较痛苦,其他的都还好~
相关资料
http://kimiya25.spaces.live.com/blog/cns!27A083D4FD9435E9!1693.entry?wa=wsignin1.0&sa=675748223
http://203.208.39.132/search?q=cache:J1BEG4zMNm0J:blogs.msdn.com/changov/archive/2009/01/19/webbrowser-control-on-transparent-wpf-window.aspx+http://blogs.msdn.com/changov/archive/2009/01/19/webbrowser-control-on-transparent-wpf-window.aspx.&cd=1&hl=zh-CN&ct=clnk&gl=cn&st_usg=ALhdy2-PnD6k-eTfya4Ygo-G9K99cEGV2A
http://www.google.cn/codesearch?q=WebBrowserOnTransparentWindow&hl=zh-CN&btnG=%E6%90%9C%E7%B4%A2%E4%BB%A3%E7%A0%81
下载
改进的WebBrowserOverlay类:http://cid-0612298d2255e149.skydrive.live.com/self.aspx/.Public/文档/WebBrowserOverlay.rar
本文的XPS版本:http://cid-0612298d2255e149.skydrive.live.com/self.aspx/.Public/文档/WPF中不规则窗体与WebBrowser控件的兼容问题解决办法.xps
PS:播放器可能得过些天才发布:)
PS2:
有个关于.Net程序安装的问题向各位英雄求助:
http://space.cnblogs.com/question/11103/
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
WPF
不规则
窗体
WebBrowser
控件
相关帖子
WPF中使用 using prism.region 报错
国产化Word处理控件Spire.Doc教程:如何用 Python 统计 Word 文档中的词频
国产化Word处理控件Spire.Doc教程:如何用 Python 统计 Word 文档中的词频
国产化PDF处理控件Spire.PDF教程:如何使用 Python 添加水印到 PDF
Excel处理控件Aspose.Cells教程:使用Python将 Excel 转换为 NumPy
WPF依赖属性学习
国产化PDF处理控件Spire.PDF教程:在 Java 中将 PDF 转换为 CSV(轻松提取 PDF 表格)
Excel处理控件Aspose.Cells教程:在 Python 中将 JSON 转换为 Pandas DataFrame
Excel处理控件Aspose.Cells教程:在 Python 中将 CSV 转换为 Pandas DataFrame
针对WPF的功耗优化(节能编程)
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
WPF中使用 using prism.region 报错
0
288
拴茅劾
2025-08-22
业界
国产化Word处理控件Spire.Doc教程:如何用 Python 统计 Word 文档中的词频
0
1050
万妙音
2025-08-23
业界
国产化Word处理控件Spire.Doc教程:如何用 Python 统计 Word 文档中的词频
0
980
岑韬哎
2025-08-23
业界
国产化PDF处理控件Spire.PDF教程:如何使用 Python 添加水印到 PDF
0
759
嫂潍
2025-08-29
业界
Excel处理控件Aspose.Cells教程:使用Python将 Excel 转换为 NumPy
0
196
郗燕岚
2025-09-01
业界
WPF依赖属性学习
0
115
诉称
2025-09-04
业界
国产化PDF处理控件Spire.PDF教程:在 Java 中将 PDF 转换为 CSV(轻松提取 PDF 表格)
0
654
轩辕琳芳
2025-09-10
业界
Excel处理控件Aspose.Cells教程:在 Python 中将 JSON 转换为 Pandas DataFrame
0
372
别萧玉
2025-09-10
业界
Excel处理控件Aspose.Cells教程:在 Python 中将 CSV 转换为 Pandas DataFrame
0
832
电棘缣
2025-09-11
安全
针对WPF的功耗优化(节能编程)
0
682
焦尔蕾
2025-09-12
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
普料飕
2025-5-29 19:55:04
关注
0
粉丝关注
18
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9984
凶契帽
9988
氛疵
9988
4
黎瑞芝
9988
5
杭环
9986
6
猷咎
9986
7
里豳朝
9986
8
肿圬后
9986
9
蝓俟佐
9984
10
虽裘侪
9984
查看更多