使 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 控件,您是否探索过...

    将控件放在GridCanvas 中,然后将拉伸的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 所在的 之外怎么办。它会起作用吗?假设我们有 Canvas 和 2 个用户控件,其中一个有 webbriowser。我想放弃它。 WebBrowser 的覆盖控制会结束吗?【参考方案2】:

不幸的是,由于操作系统呈现 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 浏览器的主要内容,如果未能解决你的问题,请参考以下文章

CefSharp WPF Web 浏览器不显示或渲染

InvokeMember("Click") Web 浏览器控件错误 C# WPF

有没有办法使用 Wpf (C#) 更改 Web 浏览器的上下文菜单

使用 CEFSharp Web 浏览器的 WPF 应用程序在 clickonce 版本中崩溃

Web浏览器控件默认IE版本

是否可以从 WinForm/WPF C# App 与 Web 浏览器进行交互?