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
Antwort
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.
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 –
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. –
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.
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.
Leider lässt mein Arbeitgeber uns keine Software zu, die wir in unserer Lösung lizenzieren müssen. –
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.
- 1. Empfehlungen zum Erstellen eines Protokollfensters in WPF
- 2. Tool zum Erstellen eines jsFiddle/jsbin.com Style-Code-Editors?
- 3. Schritte zum Erstellen eines Java-Editors mit Syntax-Färbung
- 4. Beliebiges Tutorial zum Erstellen eines Vim-ähnlichen Editors?
- 5. Erstellen eines Echtzeit-Collaboration-Editors in Java
- 6. WPF RichTextBox Benutzerdefinierte Texteigenschaft
- 7. WPF Richtextbox FontFace/FontSize
- 8. WPF-Lernprogramm zum Erstellen eines benutzerdefinierten Benutzersteuerelements
- 9. WPF RichTextBox SelectionChanged Leistung
- 10. Autogrow WPF RichTextBox
- 11. MS Word Paginierung mit mehreren wpf RichTextBox
- 12. WPF richTextBox-Frage
- 13. Wie arbeite ich mit RichTextBox in WPF
- 14. Benutzersteuerung mit RichTextBox, bindbare RichTextBox
- 15. WPF RichTextBox ohne Breite gesetzt
- 16. Erstellen eines WPF-Editors für eine XML-Datei basierend auf dem Schema
- 17. Winform mit WPF Richtextbox - Verschwindender Text
- 18. WPF RichTextBox-Unterstützung für Dokumentverknüpfungen?
- 19. WPF-Zeichenabstand unregelmäßig in RichTextBox
- 20. WPF RichTextBox löscht keinen Text
- 21. WPF Richtextbox Bindbar in .net
- 22. Gibt es wirklich grundlegende Anleitungen zum Erstellen eines einfachen Rich-Text-Editors?
- 23. Liferay 6.2 Hinzufügen eines neuen CSS-Editors
- 24. Gibt es eine "Editor API" zum Erstellen eines Code/XML-Editors?
- 25. C#/WPF: Text-Wrap von RichTextBox deaktivieren
- 26. WPF DataGrid Einzelklick zum Erstellen eines neuen Elements
- 27. Erstellen eines benutzerdefinierten ScrollViewer mit WPF UserControl
- 28. benutzerdefinierte Verknüpfung erstellen auf Zeilennummern (VS 2010) zum Drehen
- 29. WPF RichTextBox Registerkarte Auswahl Systemspeicher auffressen!
- 30. WPF: Erstellen eines Dialogfelds/Eingabeaufforderung
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. –