Tôi gặp sự cố bực bội. Đây là một phiên bản đơn giản của những gì tôi đang làm:Điều khiển trình duyệt Web WPF không nhập chế độ thiết kế khi thuộc tính tài liệu bị thay đổi
Một UserControl trong C# chứa một thanh công cụ và một đối tượng WebBrowser được nhúng. Thanh công cụ có chứa nút "Chỉnh sửa", khi được nhấp đặt bộ điều khiển trình duyệt web trong chế độ thiết kế. Nút khác, "Hủy", tắt chế độ thiết kế.
Mã giả (rất đơn giản):
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
}
Vấn đề: Nếu tôi bấm vào trang web hiển thị, và sau đó vào nút "Edit", sự kiểm soát WebBrowser sẽ không trở thành có thể chỉnh sửa . Con trỏ chuột khi hoovering trên hình ảnh/liên kết hiển thị các con trỏ chuột điều hướng trình duyệt web, không phải là những người chỉnh sửa. Nếu tôi nhấp vào văn bản, dấu mũ sẽ không hiển thị.
Gỡ lỗi cho thấy thuộc tính designMode trên tài liệu thực sự được đặt thành "Bật" trong trường hợp này, nhưng điều khiển hoạt động như thể được đặt thành "Tắt".
Nếu tôi không nhấp chuột trong trang web trước khi nhấp vào nút "Edit", mọi thứ hoạt động như mong đợi.
Lập: Nếu tôi nhấp vào nút "Hủy bỏ" khi điều khiển đang ở chế độ thiết kế, tôi nhận được (mis) hành vi tương ứng, nếu tài liệu đã được nhấp trong
Đơn giản chỉ cần nhấp vào ". Chỉnh sửa ", sau đó" Hủy ", sau đó" Chỉnh sửa "vv mà không bao giờ nhấp vào tài liệu hoạt động tốt (kiểm tra di chuột hiển thị con trỏ chuột thích hợp và tôi nhận được điều hướng liên kết hoặc chỉnh sửa tùy thuộc vào chế độ thiết kế nếu tôi nhấp vào liên kết trong tài liệu được hiển thị).
Tôi đã thử các kỹ thuật khác nhau để đảm bảo rằng một điều khiển khác sẽ tập trung trước khi tôi thay đổi thuộc tính designMode, nhưng nó không tạo ra bất kỳ sự khác biệt nào. Tôi đã tìm kiếm MSDN và một nửa của internet được biết đến và đã không tìm thấy bất kỳ đề cập đến loại vấn đề. Việc lật thuộc tính designMode như thế này có vẻ hơi bất thường.
Một chút thông tin khác: Tôi đang thiết lập các sự kiện tài liệu bằng cách thông báo tài liệu với bồn rửa do người dùng điều khiển thực hiện. Tôi nghi ngờ rằng điều này cần phải có bất kỳ mang về vấn đề này, nhưng tôi đã bao gồm nó ở đây vì lợi ích của việc hoàn thành. Cập nhật: Tắt tính năng này không làm thay đổi bất kỳ điều gì liên quan đến sự cố.
Có ai nhận ra vấn đề này không?
Cập nhật: Tôi đã giải quyết vấn đề bằng cách tạo lại điều khiển trình duyệt web trong SetDesignMode(). Đó là một giải pháp xấu xí, nhưng nó hoạt động và thực sự trông ổn. Mặc dù vậy, tôi rất quan tâm đến bất kỳ phản hồi nào về vấn đề này. Tôi tin rằng đó là một lỗi trong MSHTML.
Cả hai phương pháp đều hoạt động, cảm ơn. Tuy nhiên; Phương pháp đầu tiên bằng cách nào đó đặt "Hoàn tác" của tôi (Ctrl-Z/ExecCommand ("Hoàn tác" ...)) không hoạt động. Trên phương pháp thứ hai, các thay đổi không được phản ánh cho webBrowser.DocumentText vì một số lý do. Tôi đã có thể giải nén nó thông qua webBrowser.Dcoument.Body.InnerHtml và khắc phục sự cố. – Natan