WPF应用程序中的Web浏览器控件如何避免空域问题?

3
我正在开发一个WPF应用程序,其中一个视图中包含Web浏览器。当我运行应用程序时,它可以正常工作,但是Web浏览器控件会遮盖我的wpf区域。我知道这与AirSpace问题有关。有没有可能解决这个问题?任何帮助将不胜感激。
谢谢。
4个回答

3
问题在WPF 4.5中没有解决。 有些信息在网络上提到,如下面提到的属性将在web浏览器控件的4.5版本中可用,但计划已被放弃。因此,您需要自己处理空间问题。
WebBrowser.CompositionMode = System.Windows.Interop.CompositionMode.Full; WebBrowser.IsRedirected = true;
您可以采取的解决方法是,当其他控件出现在Web浏览器控件前面时,将Web浏览器控件的高度设置为零。
以下是示例代码:
假设您在MainWindow中有一个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;
}


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>

暂时在代码中“FixAirspace”(或通过依赖属性更改):

        ap.FixAirspace = true;

        // Display a dialog or whatever

        ap.FixAirspace = false;

还有一个NuGet包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接