2010-10-13 95 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; 
}