2009-02-19 8 views
15

Sto creando un editor di testo per un linguaggio specifico del dominio. Sto usando il WPF RichTextBox come controllo di base. Non so come includere con garbo la numerazione delle righe. Qualcuno sa di alcuni esempi?RichTextBox WPF per creare un editor con i numeri di riga

+0

Non ero abbastanza intelligente per farlo funzionare. Non sono stato in grado di capire quando il RichTextBox sta scorrendo in modo che possa provare a scorrere la ListBox della stessa quantità. E, poiché le linee si allungano troppo nella RTB, essa avvolge automaticamente la loro visualizzazione, e io dovrei omettere i numeri di riga di ListBox in quel caso. –

risposta

3

Vorrei creare un controllo composito, con un controllo del pannello stack e blocchi di testo sulla sinistra che usereste per gestire la numerazione delle righe. Se sei preoccupato del numero di linee e di troppi elementi visivi, puoi utilizzare un ListBox in modalità virtuale.

Dovresti collegarti ai vari eventi di RichTextBox in modo da sapere quando aggiornare il ListBox e calcolare l'altezza di ogni riga, ma ciò dovrebbe essere possibile con il FlowDocument collegato a RichTextBox.

+0

Non sono sicuro se mi piace questa idea: mantenere le baseline del testo della casella di riepilogo in linea con le linee di base di RichEdit potrebbe essere problematico (sicuramente se il suo formattatore di codice consente caratteri diversi), ma poiché non ho un'alternativa, +1 –

+0

Non ero abbastanza intelligente per fare quel lavoro. Non sono stato in grado di capire quando il RichTextBox sta scorrendo in modo che possa provare a scorrere la ListBox della stessa quantità. E, poiché le linee si allungano troppo nella RTB, essa avvolge automaticamente la loro visualizzazione, e io dovrei omettere i numeri di riga di ListBox in quel caso. –

3

RichText supporta "protetto" - non modificabile - span. È possibile scaricare i numeri di linea come estensioni di testo protetto come parte del flusso RTF (quando si esegue la formattazione).

In Win Forms, è possibile utilizzare RichTextBox.SelectionProtected Property. WPF deve avere qualcosa di simile.

In questo modo, tutte le linee di base saranno corrette e non sarà necessario eseguire alcuna riflessione/programmazione aggiuntiva per ottenere un corretto funzionamento dell'editor. Il testo modificabile sarà modificabile e i numeri di riga non saranno.

Unico inconveniente è che è necessario reinviare il flusso RTF dopo ogni modifica. Ma immagino che stavi già facendo questo per fornire la formattazione di analisi/diagnostica degli errori/qualsiasi altra cosa.

2

Come utilizzare il controllo WPF di testo ricco di AqiStar? AqiStar.TextBox

Io non lavoro per loro ... So solo che Oren sta usando questo prodotto nel suo NHibernate Profiler (NHProf) e sembra scavare.

+0

Sfortunatamente, il mio datore di lavoro non ci permetterà di includere software che dobbiamo licenziare nella nostra soluzione. –

7

AvalonEdit è un buono ed è open source. Penso che abbia quasi tutte le funzionalità del controllo Aqistar come l'evidenziazione e la piegatura della sintassi. Facilità di configurazione e utilizzo. Ulteriori dettagli possono essere trovati here. enter image description here

Problemi correlati