我的图片需要放在WebBrowser
上方。问题是无论我做什么,图像总是在WebBrowser
控件后面。我不能使用Awesomium,一个使用Chrome而不是IE ActiveX的自定义Web浏览器控件,因为Awesomium无法加载XBAP文件。
我几乎到处都看,但我找不到合适的解决方法。
如何通过WPF WebBrowser
控件显示图像?
答案 0 :(得分:1)
我怀疑WPF WebBrowser
的实现方式与Silverlight和WinRT(又名Windows 8 Metro)类似。
Silverlight中的WebBrowser
和WinRT / Metro中的WebView
始终位于Z顺序的顶部。这显然是由于他们使用Trident ActiveX控件。要解决Z顺序问题,我们会提供WebBrowserBrush
和WebViewBrush
。
不幸的是,它似乎不像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;
}