WPF 应用程序中的 Web 浏览器控件没有空域问题?

问题描述 投票:0回答:5

我正在开发一个 WPF 应用程序,它的视图之一中有 Web 浏览器。当我运行应用程序时,它工作正常,但 Web 浏览器控件位于我的 wpf 区域的顶部。我知道这与空域问题有关。有什么可能的方法来克服它吗?任何帮助将不胜感激。

谢谢

wpf webbrowser-control
5个回答
3
投票

该问题在 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;
}


1
投票

这是一个已知问题,如 Neeraj 帖子所述。但在 WPF 4.5 中,这个问题似乎已得到解决,因此,如果您不介意使用 Beta 版本,则应该下载 Visual Studio 11


1
投票

尝试 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 包。


0
投票

对于像我这样仍然面临问题的人:CEFBrowser (CefSharp.Wpf.NETCore) 是一个 Chromium 嵌入式浏览器,不存在空域问题。它相对资源密集,但避免了缓解空域问题所需的额外代码

© www.soinside.com 2019 - 2024. All rights reserved.