使 WPF 控制 Web 浏览器
Posted
技术标签:
【中文标题】使 WPF 控制 Web 浏览器【英文标题】:Make WPF control over the web browser 【发布时间】:2012-03-01 16:39:00 【问题描述】:我有一个 WPF 应用程序,其中有一个嵌入式 Web 浏览器控件。我想在特定时间在 Web 浏览器上显示动画,但问题是 WPF 控件在保存在 Web 浏览器上时不可见。
有什么方法可以显示我的用户对网络浏览器的控制?
【问题讨论】:
【参考方案1】:请先回答我,
此 Web 浏览器控件是托管在 WinFormHost
中的 WPF Web Browser
控件还是 Winform
网络浏览器控件?
对于任何在其上显示动画的 WPF 控件,您是否探索过...
-
将控件放在
Grid
或Canvas
中,然后将拉伸的Border
(其中包含运行动画)作为网格/画布的最后一个子元素?
Adorner
不断改变绘图上下文来模拟动画?
带动画的透明Popup
,其静态放置(绑定到控件的绝对左侧、顶部位置以及实际高度和宽度属性)在控件上方?
试试网页浏览器控制的透明弹出方式...
<Grid>
<WebBrowser x:Name="WebBrowser1"/>
<Popup IsOpen="Binding StartAninmation"
AllowsTransparency="True"
Grid.RowSpan="99"
Grid.ColumnSpan="99"
Placement="Center"
Width="Binding ActualWidth,
ElementName=WebBrowser1,
Mode=OneWay"
Height="Binding ActualHeight,
ElementName=WebBrowser1,
Mode=OneWay"
PlacementTarget="Binding ElementName=WebBrowser1"
Opacity="0.5"
Margin="3">
<TextBlock Text="Loading ..."/>
</Popup>
</Grid>
其中一个肯定适用于您的情况。
【讨论】:
WPF Web 浏览器控件在技术上是一个封装的 WinForms WebBrowser 控件,因此它呈现在 WinForms 层中,该层始终位于 WPF 层之上。因此,装饰器和弹出窗口将不起作用:( 据我记忆,我已经成功使用了透明Popup
。
+1,即使我已经为这个确切的要求使用了透明弹出窗口。
好吧,伙计们,我的错误,Popup 渲染另一个窗口,所以它可以工作,Adorner 在可视化树中渲染并且不会工作,刚刚测试过,感谢您对此的更正! ...
如果过度控制在 WebBrowser 所在的 不幸的是,由于操作系统呈现 WinForms 和 WPF 内容的顺序,WPF Webbrowser 控件(它基本上是一个包装的 WinForms WebBrowser 控件)是不可能的。
另请参阅: Is there a way to render WPF controls on top of the wpf WebBrowser control?
有一个第三方应用程序Awsomium 应该可以实现。
编辑: 另一种可能性是在 WebBrowser 控件上方呈现一个无框架窗口。但是将其保持在正确的位置/z 顺序有点棘手。
【讨论】:
【参考方案3】:CefSharp 提供基于 Chromium/V8 的纯 WPF 浏览器控件,不受 Microsoft WebBrowser 控件的空域问题的影响(免责声明:我是 CefSharp 的维护者)。
【讨论】:
无需构建,可以使用二进制版本:github.com/ataranto/CefSharp/downloads Anthony,btw 怎么不可能建? :) 我刚刚尝试使用我的 VS2012 并失败了。我尝试了 chilitom 的分支和你的分支。抱怨大量的外部参考。以上是关于使 WPF 控制 Web 浏览器的主要内容,如果未能解决你的问题,请参考以下文章
InvokeMember("Click") Web 浏览器控件错误 C# WPF
有没有办法使用 Wpf (C#) 更改 Web 浏览器的上下文菜单