Das WPF-WebBrowser-Steuerelement wechselt nicht in den Entwurfsmodus, wenn die Dokumenteigenschaft geändert wird

Ich habe ein frustrierendes Problem. Hier ist eine vereinfachte Version von dem, was ich tue:

Ein UserControl in c # enthält eine Symbolleiste und ein eingebettetes WebBrowser-Objekt. Die Symbolleiste enthält eine Schaltfläche "Bearbeiten", über die beim Klicken das Webbrowser-Steuerelement in den Entwurfsmodus versetzt wird. Eine andere Schaltfläche, "Abbrechen", deaktiviert den Entwurfsmodus.

Pseudocode (sehr vereinfacht):

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
}

Das Problem: Wenn ich auf die angezeigte Webseite und dann auf die Schaltfläche "Bearbeiten" klicke, kann das WebBrowser-Steuerelement nicht mehr bearbeitet werden. Der Mauszeiger zeigt beim Bewegen des Mauszeigers über Bilder / Links die Navigations-Mauszeiger des Webbrowsers, nicht die Bearbeitungszeiger. Wenn ich in den Text klicke, wird das Caret nicht angezeigt.

Das Debuggen zeigt, dass die designMode-Eigenschaft des Dokuments in dieser Situation tatsächlich auf "On" gesetzt ist, das Steuerelement sich jedoch so verhält, als ob es auf "Off" gesetzt wäre.

Wenn ichnicht Klicken Sie auf die Webseite, bevor Sie auf die Schaltfläche "Bearbeiten" klicken.alles funktioniert wie erwartet.

Ausarbeitung: Wenn ich auf die Schaltfläche "Abbrechen" klicke, während sich das Steuerelement im Entwurfsmodus befindet, wird das entsprechende (falsche) Verhalten angezeigt, wenn das Dokument angeklickt wurde.

Klicken Sie einfach auf "Bearbeiten", dann auf "Abbrechen", dann auf "Bearbeiten" usw., ohne jemals in das Dokument zu klicken. (Der Mouseover-Test zeigt die richtigen Mauszeiger an, und ich erhalte abhängig vom Entwurfsmodus eine Linknavigation oder -bearbeitung Klicken Sie auf einen Link im angezeigten Dokument.

Ich habe verschiedene Techniken ausprobiert, um sicherzustellen, dass ein anderes Steuerelement den Fokus erhält, bevor ich die designMode-Eigenschaft ändere, aber es macht keinen Unterschied. Ich habe MSDN und die Hälfte des bekannten Internets durchsucht und keine Erwähnung dieses Problems gefunden. Das Spiegeln der designMode-Eigenschaft wie folgt scheint ziemlich ungewöhnlich zu sein.

Noch eine kleine Information: Ich richte Dokumentereignisse ein, indem ich das Dokument mit einer von der Benutzersteuerung implementierten Senke informiere. Ich bezweifle, dass dies einen Einfluss auf das Problem haben sollte, aber ich habe es aus Gründen der Vollständigkeit hier aufgenommen.Aktualisieren: Das Deaktivieren ändert nichts an dem Problem.

Kennt jemand dieses Problem?

Aktualisieren: Ich habe das Problem umgangen, indem ich das Webbrowser-Steuerelement in SetDesignMode () neu erstellt habe. Es ist eine hässliche Lösung, aber es funktioniert und sieht tatsächlich in Ordnung aus. Ich bin jedoch sehr an Rückmeldungen zu diesem Problem interessiert. Ich glaube, es ist ein Fehler in MSHTML.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage