我正在开发一个 WPF 应用程序,它的视图之一中有 Web 浏览器。当我运行应用程序时,它工作正常,但 Web 浏览器控件位于我的 wpf 区域的顶部。我知道这与空域问题有关。有什么可能的方法来克服它吗?任何帮助将不胜感激。
谢谢
该问题在 WPF 4.5 中并未得到解决。 网上有一些信息,例如下面提到的属性将在 4.5 版本的 Web 浏览器控件中可用,但该计划已被放弃。所以空域问题需要你自己处理。
WebBrowser.CompositionMode = System.Windows.Interop.CompositionMode.Full; WebBrowser.IsRedirected = true;
您可以采取的解决方法是,当某些其他控件位于 Web 浏览器控件前面时,将 Web 浏览器控件的高度设置为零。
在下面找到示例代码,
假设您在主窗口中有一个 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;
}
这是一个已知问题,如 Neeraj 帖子所述。但在 WPF 4.5 中,这个问题似乎已得到解决,因此,如果您不介意使用 Beta 版本,则应该下载 Visual Studio 11。
尝试 Chris84898 的 AirspaceFixer 项目。 https://github.com/chris84948/AirspaceFixer
您只需将有问题的控件托管在面板内,它就会为您完成繁重的工作。
XAML:
<asf:AirspacePanel x:Name="ap"
FixAirspace="{Binding FixAirspace}"
Grid.Column="0" Grid.Row="1" >
<WebBrowser x:Name="browser" Navigated="Browser_Navigated" />
</asf:AirspacePanel>
在代码中临时“修复空域”(或通过依赖属性更改):
ap.FixAirspace = true;
// Display a dialog or whatever
ap.FixAirspace = false;
还有一个 NuGet 包。
对于像我这样仍然面临问题的人:CEFBrowser (CefSharp.Wpf.NETCore) 是一个 Chromium 嵌入式浏览器,不存在空域问题。它相对资源密集,但避免了缓解空域问题所需的额外代码