我有一個令人沮喪的問題。以下是我正在做的簡化版本:當文檔屬性發生變化時,WPF WebBrowser控件不會進入設計模式
c#中的UserControl包含一個工具欄和一個嵌入式WebBrowser對象。工具欄包含一個「編輯」按鈕,點擊時可以在設計模式下設置網頁瀏覽器控件。另一個按鈕「取消」將關閉設計模式。
僞代碼(很簡單):
public void SetDesignMode(bool dm) {
IHTMLDocument2 doc = webBrowser.Document as IHTMLDocument2;
if (dm) doc.designMode = "On";
else doc.designMode = "Off";
_designMode = dm;
ReloadDocument(); // setting designmode clears the document element, so it must be reloaded
}
public void OnLoadCompleted() {
IHTMLDocument2 doc = webBrowser.Document as IHTMLDocument2;
if (!_documentLoaded) {
if (_designMode) doc.designMode = "On";
else doc.designMode = "Off";
ReloadDocument();
_documentLoaded = true;
}
}
public void ReloadDocument() {
_documentLoaded = false;
// code that navigates to the document
}
問題: 如果我點擊所顯示的網頁上,然後在「編輯」按鈕,WebBrowser控件不會成爲編輯。當鼠標指向圖片/鏈接時,鼠標指針顯示Web瀏覽器導航鼠標指針,而不是編輯指針。如果我點擊文字,插入符號將不會顯示。
調試表明,在這種情況下,文檔上的designMode屬性實際上設置爲「On」,但控件的行爲就像設置爲「Off」一樣。
如果我點擊「編輯」按鈕之前沒有點擊網頁中,一切正常。
闡述: 如果我點擊「取消」按鈕時,控制在設計模式中,我得到相應的(MIS)的行爲,如果該文件已被點擊的
只需點擊「。編輯「,然後」取消「,然後」編輯「等,而不用單擊文檔就能正常工作(鼠標懸停測試顯示正確的鼠標指針,並且根據設計模式獲得鏈接導航或編輯,如果點擊鏈接顯示的文件)。
我試過各種技術來確保另一個控件在我更改designMode屬性之前獲得焦點,但它沒有任何區別。我搜索了MSDN和一半已知的互聯網,並沒有發現任何提及這類問題。像這樣翻轉designMode屬性似乎很不尋常。
另外還有一些信息:我通過建議使用由usercontrol實現的接收器來建立文檔事件。我懷疑這應該對問題有任何影響,但爲了完整起見,我將它包括在內。 更新:禁用此功能不會改變有關問題的任何內容。
有人認識到這個問題嗎?
更新: 我已經通過在SetDesignMode()中重新創建Web瀏覽器控件來解決此問題。這是一個醜陋的解決方案,但它的工作原理並確實看起來不錯。不過,我對這個問題的任何反饋都很感興趣。我相信這是MSHTML中的一個錯誤。
這兩種方法的工作,謝謝。然而; 第一種方法以某種方式將我的「撤消」(Ctrl-Z/ExecCommand(「撤消」...))置於操作之外。 在第二種方法中,出於某種原因,更改未反映到webBrowser.DocumentText。我能夠通過webBrowser.Dcoument.Body.InnerHtml提取它,但解決了這個問題。 – Natan 2012-11-22 13:17:08