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

时间:2011-12-15 00:25:53

标签: wpf webbrowser-control

我正在开发一个WPF应用程序,该应用程序在其中一个视图中包含Web浏览器。当我运行应用程序时,它工作正常但Web浏览器控件位于我的wpf区域之上。我知道这与AirSpace问题有关。有没有办法克服它?任何帮助将不胜感激。

由于

4 个答案:

答案 0 :(得分:2)

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;
}

答案 1 :(得分:1)

答案 2 :(得分:1)

这是一个众所周知的问题,正如Neeraj所说。但是使用WPF 4.5这似乎已经解决了,所以如果你不介意使用测试版,你应该download Visual Studio 11

答案 3 :(得分: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>

要在代码中临时“修复Airspace”(或通过更改依赖项属性):

        ap.FixAirspace = true;

        // Display a dialog or whatever

        ap.FixAirspace = false;

也有一个NuGet软件包。