2010-10-13 94 views
7

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

我看到的替代方案here使用Popup控件将项目置于WebBrowser控件的顶部,但是我弹出的问题是当您切换到另一个应用程序时它们保持打开状态,并且它们不随应用程序移动用户调整/移动应用程序。

有没有其他方法可以做到这一点?嵌入式Web内容是aspx页面,因此不是静态HTML。

回答

4

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

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

+0

不幸的是,我的网页内容是动态的 – Rachel 2010-10-14 12:03:42

+0

标记此答案,因为它最好地解释了问题。我实际上做的是为WebBrowser控件创建一个全局样式,当弹出窗口可见时隐藏它们。如果我需要在弹出窗口打开的情况下使用网页内容,我会看到关于实现第二个窗口并处理调整大小/移动问题,但现在这适合我的目的。 – Rachel 2010-10-14 12:33:09

2

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

+0

是否有已经任何项目?谢谢。 – xmedeko 2016-11-10 08:25:11

0

WPF 4.0 Chromium WebBrowser项目是内置的WebBrowser控件的替代品,它应该可以满足您的需求。

+0

我试过,但似乎无法得到它在我的机器上编译。 – Rachel 2010-10-14 12:28:21

0

我已经取得了一些成功的另一种方法是使用裁剪区域来本质上削减主要在这些WebBrowser包装控件中托管的ActiveX控件中的孔。如果我有时间,我会写一个我已经找到的东西的示范,并试图包括一个例子,但我只是想分享一下,以防有人有更多的时间来看看,并能击败我。

0

您可以做的解决方法是将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; 
}