Ho un problema frustrante. Ecco una versione semplificata di quello che sto facendo:Il controllo WebBrowser WPF non entra in modalità progettazione quando viene modificata la proprietà del documento
Un controllo utente in C# contiene una barra degli strumenti e un oggetto WebBrowser incorporato. La barra degli strumenti contiene un pulsante "Modifica", che quando viene cliccato imposta il controllo del browser in modalità progettazione. Un altro pulsante, "Annulla", disattiva la modalità di progettazione.
Pseudocodice (molto semplificata):
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
}
Il problema: Se clicco sulla pagina web visualizzata, e poi sul pulsante "Modifica", il controllo WebBrowser non diventerà modificabile . Il puntatore del mouse durante l'acquisizione di immagini/collegamenti mostra i puntatori del mouse di navigazione del browser Web, non quelli di modifica. Se clicco nel testo, il segno di omissione non verrà visualizzato.
Il debug rivela che la proprietà designMode sul documento è effettivamente impostata su "On" in questa situazione, ma il controllo si comporta come se fosse impostato su "Off".
Se Non click nella pagina web prima di fare clic sul pulsante "Modifica", tutto funziona come previsto.
Elaborazione: Se si fa clic sul pulsante "Annulla" quando il controllo è in modalità di progettazione, ho la (dis) comportamento corrispondente, se il documento è stato cliccato in
Semplicemente cliccando su ". Modifica ", quindi" Annulla ", quindi" Modifica "ecc. Senza mai fare clic sul documento funziona correttamente (il test del mouseover mostra i puntatori del mouse corretti, e ottengo la navigazione o la modifica del link in base alla modalità di progettazione se faccio clic su un collegamento in il documento visualizzato).
Ho provato varie tecniche per assicurarsi che un altro controllo ottenga lo stato attivo prima di modificare la proprietà designMode, ma non fa alcuna differenza. Ho cercato MSDN e metà di Internet conosciuto e non ho trovato alcuna menzione di questo tipo di problema. Capovolgere la proprietà designMode come questo sembra essere abbastanza insolito.
Un altro bocconcino di informazioni: sto configurando gli eventi del documento consigliando il documento con un sink implementato dal controllo us. Dubito che questo dovrebbe avere alcuna incidenza sul problema, ma l'ho incluso qui per il gusto di essere completo. Aggiornamento: La disattivazione di questo non modifica nulla riguardo al problema.
Qualcuno riconosce questo problema?
Aggiornamento: Ho risolto il problema ricreando il controllo del browser Web in SetDesignMode(). È una brutta soluzione, ma funziona e sembra davvero ok. Sono molto interessato a qualsiasi feedback su questo problema, però. Credo che sia un bug in MSHTML.
Entrambi i metodi funzionano, grazie. Però; Il primo metodo in qualche modo ha messo il mio "Annulla" (Ctrl-Z/ExecCommand ("Annulla" ...)) fuori azione. Sul secondo metodo, le modifiche non si riflettono su webBrowser.DocumentText per qualche motivo. Sono stato in grado di estrarlo tramite webBrowser.Dcoument.Body.InnerHtml e ho risolto il problema. – Natan