2009-02-19 6 views
15

Ich erstelle einen Texteditor für eine domänenspezifische Sprache. Ich verwende das WPF RichTextBox als die grundlegende Steuerung. Ich weiß nicht, wie man Zeilennummern anmutig einfügt. Kennt jemand Beispiele?WPF RichTextBox zum Erstellen eines Editors mit Zeilennummern

+0

Ich war nicht schlau genug, um diese Arbeit zu machen. Ich konnte nicht herausfinden, wann die RichTextBox scrollt, so dass ich versuchen kann, die ListBox um denselben Betrag zu scrollen. Und da Zeilen im RTB zu lang werden, wird die Anzeige automatisch umbrochen, und in diesem Fall sollte ich die Zeilennummern von ListBox weglassen. –

Antwort

3

Ich würde ein zusammengesetztes Steuerelement erstellen, mit einem Stack-Panel-Steuerelement und Textblöcke auf der linken Seite, die Sie verwenden würden, um die Zeilennummerierung zu behandeln. Wenn Sie mit der Anzahl der Zeilen und zu vielen visuellen Elementen zu tun haben, können Sie eine ListBox im virtuellen Modus verwenden.

Sie müssten sich mit den verschiedenen Ereignissen auf der RichTextBox verbinden, damit Sie wissen, wann Sie die ListBox aktualisieren und die Höhe jeder Zeile berechnen müssen, aber das sollte mit dem an die RichTextBox angehängten FlowDocument möglich sein.

+0

Ich bin mir nicht sicher, ob ich diese Idee mag - die Listbox-Text-Baselines inline mit den RichEdit-Baselines zu halten könnte problematisch sein (definitiv, wenn sein Codeformatierer verschiedene Schriftarten zulässt) - aber ich habe keine Alternative, +1 –

+0

Ich war nicht schlau genug, um diese Arbeit zu machen. Ich konnte nicht herausfinden, wann die RichTextBox scrollt, so dass ich versuchen kann, die ListBox um denselben Betrag zu scrollen. Und da Zeilen im RTB zu lang werden, wird die Anzeige automatisch umbrochen, und in diesem Fall sollte ich die Zeilennummern von ListBox weglassen. –

3

RichText unterstützt "geschützt" - nicht editierbar - Spannen. Sie könnten Ihre Zeilennummern als geschützte Textspannen als Teil des RTF-Streams ausgeben (wenn Sie Ihre Formatierung vornehmen).

In Windows Forms können Sie RichTextBox.SelectionProtected Property verwenden. WPF muss etwas ähnliches haben.

Auf diese Weise werden alle Ihre Baselines korrekt sein und Sie müssen nicht extra denken/programmieren, damit sich der Editor richtig verhält. Editierbarer Text kann bearbeitet werden, Zeilennummern nicht.

Einziger Nachteil ist, dass Sie den RTF-Stream nach jeder Änderung erneut einreichen müssen. Aber ich stelle mir vor, dass Sie das bereits getan haben, um die Syntaxanalyse/Fehlerdiagnose/was auch immer zu machen.

2

Wie wäre es mit AqiStars Rich Text WPF-Steuerelement?

Ich arbeite nicht für sie ... Ich weiß nur, dass Oren dieses Produkt in seinem NHibernate Profiler (NHProf) verwendet und er scheint es zu graben.

+0

Leider lässt mein Arbeitgeber uns keine Software zu, die wir in unserer Lösung lizenzieren müssen. –

7

AvalonEdit ist ein guter, und es ist Open Source. Ich denke, es hat fast alle Funktionen der Aqistar-Steuerung wie Syntax-Highlighting und Faltung. Einfach zu konfigurieren und zu verwenden. Weitere Details finden Sie unter here. enter image description here

Verwandte Themen