我有一张图片需要放在WebBrowser
. 问题是无论我做什么,图像总是落在WebBrowser
控件后面。我不能使用 Awesomium,这是一个使用 Chrome 而不是 IE ActiveX 的自定义 Web 浏览器控件,因为 Awesomium 无法加载 XBAP 文件。
我几乎到处都看过,但我找不到解决这个问题的合适方法。
如何在 WPFWebBrowser
控件上显示图像?
WPF 4.5 中没有解决这个问题。一些论坛上有一些信息,例如下面提到的属性将在 4.5 版本的 Web 浏览器控件中可用,但该计划已被放弃。所以你需要自己处理空域问题。
WebBrowser.CompositionMode = System.Windows.Interop.CompositionMode.Full; WebBrowser.IsRedirected = true;
当其他一些控件出现在 Web 浏览器控件前面时,您可以做的解决方法是使 Web 浏览器控件的高度为零。
在下面找到示例代码,
假设您在主窗口中有一个 Web 浏览器控件。当您执行某些操作时,例如:单击一个按钮,您将拥有另一个位于 MainWindow 上方的用户控件。但是,由于 Airspace 问题,Web 浏览器不在其父控件中,而是在您的控件之上。
修复:标准修复是当您触发对它的其他控制时,您可以将 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;
}
我怀疑 WPFWebBrowser
的实现方式与 Silverlight 和 WinRT(又名 Windows 8 Metro)类似。
WebBrowser
Silverlight 和WinRT/Metro 中的WebView
Z 顺序始终位于顶部。这显然是由于他们使用了 Trident ActiveX 控件。为了解决 Z 顺序问题,提供了WebBrowserBrush
和WebViewBrush
。
不幸的是,WPF 似乎没有为此目的提供画笔。
在互联网上搜索,似乎有些人在尝试模仿这种刷子行为方面取得了不同程度的成功。但是,这可能对您没有真正的帮助,因为使用任何类型的画笔都会删除与渲染内容的交互性。
WPF webbrowser 不是真正的 WPF 控件,而是使用一些 HwndHost 来显示一些 IE 好东西。这会导致“WPF 空域”问题(应使用 .net 4.5 修复)。在 webbrowser 控件上方显示图像的唯一选项是将其放在 webbrowser 上方的 Popup 中。弹出窗口有自己的 Win32 Hwnd,因此有自己的“空域”。
只是做类似的事情
<WebBrowser Name="web">
</WebBrowser>
<Popup PlacementTarget="{Binding ElementName=web}" Placement="Center" IsOpen="true">
<Image Source="blub.png"/>
</Popup>