有没有办法在wpf WebBrowser控件之上呈现WPF控件?

时间:2010-10-13 18:09:00

标签: wpf xaml browser

我的应用程序中需要一个嵌入式WebBrowser控件,并且在显示WPF内容时遇到问题。应用程序有时会显示用于编辑数据或显示错误的弹出窗口,并且WebBrowser会在弹出窗口之上绘制,因为它是WinForms控件。

我看了here的替代方法是使用Popup控件将项目放在WebBrowser控件的顶部,但是我的Popups问题是当你切换到另一个应用程序时它们保持打开状态,并且它们不随你的移动而移动用户调整大小/移动应用程序时的应用程序。

我有替代方法吗?嵌入式Web内容是aspx页面,因此不是静态HTML。

6 个答案:

答案 0 :(得分:4)

不幸的是,

嵌入式Web浏览器很糟糕。如果您在WebBrowser中显示实际,真实,动态的Web内容,则必须经历将另一个Window链接到托管WebBrowser窗口的痛苦,并自己处理移动/调整大小/等等。我还没有看到另一种有效的方式。

如果您正在显示静态内容(或来自您可以控制或影响的来源的内容),您可以考虑在DocumentViewer中显示RTF文档,而不是WebBrowser的icky空域问题控制。

答案 1 :(得分:2)

解决空域问题的一种方法是创建一个新的无框窗口并将其放置在webbrowser控件的顶部。这个问题的主要问题是当主窗口移动/调整大小/等时保持正确定位。

答案 2 :(得分:1)

您可以做的解决方法是将Web浏览器控件的高度设置为零,当其他控件出现在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;
}

答案 3 :(得分:0)

WPF 4.0 Chromium WebBrowser项目是内置WebBrowser控件的替代方案,可以满足您的需求。

答案 4 :(得分:0)

我取得了一些成功的另一种方法是使用剪切区域来基本上在ActiveX控件中剪切漏洞,这些漏洞基本上是在这些WebBrowser包装器控件中托管的。如果我有时间,我会写一个我发现的东西的演示,并尝试包含一个例子,但我只是想分享一下,以防有人有更多的时间去研究并且可以打败我。

答案 5 :(得分:-2)

您可以使用Adorner来实现这一目标。 http://msdn.microsoft.com/en-us/library/ms753340.aspx