将图像放在Web浏览器控制失败上

时间:2012-07-03 01:59:13

标签: wpf image browser overlay

我的图片需要放在WebBrowser上方。问题是无论我做什么,图像总是在WebBrowser控件后面。我不能使用Awesomium,一个使用Chrome而不是IE ActiveX的自定义Web浏览器控件,因为Awesomium无法加载XBAP文件。

我几乎到处都看,但我找不到合适的解决方法。

如何通过WPF WebBrowser控件显示图像?

3 个答案:

答案 0 :(得分:1)

我怀疑WPF WebBrowser的实现方式与Silverlight和WinRT(又名Windows 8 Metro)类似。

Silverlight中的WebBrowser和WinRT / Metro中的WebView始终位于Z顺序的顶部。这显然是由于他们使用Trident ActiveX控件。要解决Z顺序问题,我们会提供WebBrowserBrushWebViewBrush

不幸的是,它似乎不像WPF为此提供了一个画笔。

在互联网上搜索,看起来有些人在试图模仿这种刷子行为方面取得了不同程度的成功。但是,这可能无法帮助您,因为使用任何类型的画笔都会删除与渲染内容的交互性。

答案 1 :(得分:1)

WPF webbrowser不是一个真正的WPF控件,而是使用一些HwndHost来显示一些IE好东西。 这导致了“WPF空域”问题(应该使用.net 4.5修复)。 在webbrowser控件上方显示图像的唯一选项是将其放在webrowser上方的Popup中。 弹出窗口有自己的Win32 Hwnd,因此拥有自己的“空域”。

做一些像

这样的事情
<WebBrowser Name="web">
</WebBrowser>
<Popup PlacementTarget="{Binding ElementName=web}" Placement="Center" IsOpen="true">
 <Image Source="blub.png"/>
</Popup>

答案 2 :(得分:0)

WPF 4.5中没有解决该问题。在某些论坛中有一些信息,例如下面提到的属性将与4.5版本的Web浏览器控件一起提供,但是该计划已被删除。所以你需要自己处理空域问题。

WebBrowser.CompositionMode = System.Windows.Interop.CompositionMode.Full; WebBrowser.IsRedirected = true;

您可以做的解决方法是将Web浏览器控件的高度设置为零,当其他控件出现在Web浏览器控件之前时。

在下面找到示例代码,

假设您在Mainwindow中有一个Web浏览器控件。当您执行某些操作时,例如:单击一个按钮,您将拥有MainWindow上方的另一个用户控件。但是,由于Airspace问题,Web浏览器不会位于其父控件中并且处于您的控制之上。

FIX:标准修复是您可以在触发其他控件时将Web浏览器的高度设置为零,具体取决于您的方案。下面是一个示例实现。

在MainWindow.Xaml中包含事件。

Activated="Window_Activated"
Deactivated="Window_Deactivated"

在Xaml.cs中,通过设置高度来处理场景。

private void Window_Activated(object sender, EventArgs e)
{
    wb.Height = double.NaN;
}

private void Window_Deactivated(object sender, EventArgs e)
{
    wb.Height = 0;
}