2016-04-21 13 views
7

L'estensione sto scrivendo la vita iniziata dalla Procedura dettagliata: creazione di un esempio margine Glyph fornito da Microsoft: https://msdn.microsoft.com/en-us/library/ee361745.aspxVisual Studio MEF Extension - Forza Margine Glifi di essere aggiornati o Ridisegna

Tutto funziona bene, tranne che sto cercando di innescare il ridisegno o l'aggiornamento dei glifi margine ogni volta che i dati che uso per decidere quale linea disegnare un glifo sulle modifiche.

Fondamentalmente ho un pulsante in una finestra degli strumenti, quando l'utente fa clic sul pulsante, voglio che un glifo appaia nel margine. In questo momento, non appare finché non scorri e torni indietro, o ovviamente chiudi e ricarichi il documento.

Ho cercato questo e ho visto alcuni esempi di codice che utilizzano IViewTaggerProvider anziché ITaggerProvider. In questi casi è risultato che un gestore di un evento LayoutChanged può essere aggiunto alla classe derivata ITagger che contiene anche il metodo GetTags. Tuttavia non sono riuscito a passare correttamente il codice dall'utilizzo di ITaggerProvider a IViewTaggerProvider, l'estensione si è bloccata durante l'esecuzione. Non so se questo è un cambiamento che porterà alla soluzione, o se non è necessario.

Come posso forzare il rendering del glifo? Posso sollevare un evento di qualche tipo per forzare il codice GetTags da esercitare? Come potrei sollevare quell'evento al di fuori della classe? Ad esempio, dalla finestra degli strumenti?

+0

Ho la stessa domanda ora. Potresti per favore indicare se hai trovato qualche soluzione per questo problema. Le eccezioni relative al cambio di layout possono essere superate eliminando i file ComponentModelCache. – madufit1

risposta

0

Eri sulla strada giusta, passare da ITaggerProvider a IViewTaggerProvider mi ha permesso di ridisegnare i glifi. Ho utilizzato il Implementazione di una sezione di Brace Matching Tagger Provider nell'esempio Walkthrough: Displaying Matching Braces per apportare queste modifiche.

Utilizzando l'IViewTaggerProvider, quindi è possibile chiamare

TagsChanged?.Invoke(this, new SnapshotSpanEventArgs(
           new SnapshotSpan(
             SourceBuffer.CurrentSnapshot, 
             0, 
             SourceBuffer.CurrentSnapshot.Length))); 

nelle funzioni di chiamare in modo esplicito getTags e andare oltre le campate nello snapshot corrente.

Problemi correlati