Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Lesedauer 2 Min.

Kostenloses Syntax Highlighting mit AvalonEdit

Die zentrale Textbox von SharpDevelop steht auch für andere WPF-Projekte zur Verfügung.
Wer Textabschnitte in einem Eingabefeld markiert darstellen will, muss unter WPF auf die RichtTextBox zurückgreifen. Mit ihr lassen sich über TextRange-Objekte ausgewählte Passagen formatieren, also in Schriftart, Farbe oder Hintergrund anpassen.Allerdings ist das ein steiniger Weg, der noch viel beschwerlicher wird, wenn es nicht nur um das Hervorheben einzelner Wörter geht, sondern das Formatieren eines Quelltextes. Dann müssen Schlüsselwörter eingefärbt, Kommentare ausgegraut oder Strings fett hervorgehoben werden.AvalonEdit ist genau für diesen Zweck konzipiert worden (NuGet Package). Es handelt sich dabei um das zentrale Editierfeld des Open-Source-Projekts SharpDevelop - eine Entwicklungsumgebung für .NET.AvalonEdit ist ein WPF-Control, dass Syntax Highlighting schon eingebaut hat. Als Entwickler kann man mit einer sogenannten XSHD-Datei das Syntax Highlighting konfigurieren. Das sind XML-Dateien, die Regeln und Formatierungen festlegen. Eine XSHD-Datei für die Formatierung von C#-Code findet sich beispielsweise auf GitHub.Hier ein Ausschnitt aus dieser Datei:
 @" " span for escape sequences    
Die Regel im Span-Abschnitt legt fest, wann es sich bei dem Text um einen String handelt. Das Attribut multiline="true" teilt AvalonEdit mit, dass so ein String auch über mehrere Zeilen gehen kann. Wie das Ganze dann aussehen soll, steht im Tag Color.Der folgender Code lädt die XSHD-Datei CustomHighlighting.xshd in AvalonEdit.
using (Stream xshd_stream = File.OpenRead("CustomHighlighting.xshd")) { XmlTextReader xshd_reader = new XmlTextReader(xshd_stream); IHighlightingDefinition hd = ICSharpCode.AvalonEdit.Highlighting.Xshd.HighlightingLoader. Load(xshd_reader, ICSharpCode.AvalonEdit.Highlighting.HighlightingManager.Instance); textEditor.SyntaxHighlighting = hd; xshd_reader.Close(); xshd_stream.Close(); } 
Einziger Nachteil von AvalonEdit besteht darin, dass die Text-Eigenschaft kein Dependency Property ist. Sie lässt sich also nicht so einfach in einem MVVM-Szenario anbinden. [tib]

Neueste Beiträge

Chunks mit Köpfchen - KI für KMU, Teil 1
Wie trenne ich Textinformationen in sinnvolle Segmente?
7 Minuten
DDC hakt nach: Hör auf, Dich über Verbindungsstrings zu ärgern
Die App läuft lokal wie geschmiert, aber sobald Backend-Services ins Spiel kommen, stottert die Maschine. Connection Strings, die nicht wollen. Emulator-Konfigurationen, die nerven. Johan Smarius erklärt im Interview und auf der .NET Developer Conference 2025, wie es anders - und viel besser geht.
4 Minuten
10. Nov 2025
Generative AI und Python - Python und AI, Teil 4
Generative KI mit Python nutzen und so die Basis für eigene Anwendungen schaffen.
7 Minuten
Miscellaneous

Das könnte Dich auch interessieren

Benchmark im Unit-Test-Stil - Best of NuGet, Teil 4
NuGet-Pakete können das Leben des .NET-Entwicklers sogar um neue Werkzeuge erweitern, die sich auf den Entwicklungsworkflow (und nicht den bearbeiteten Code) auswirken. Mit BenchmarkDotNet steht ein Musterbeispiel dieses Konzepts zur Verfügung, das die Überprüfung der Performance von Code aller Arten ermöglicht.
7 Minuten
16. Okt 2025
Attraktives GUI mit Spectre.Console - Best of NuGet, Teil 6
Mit der Bibliotheksfamilie Spectre.Console steht ein neues Produkt ante portas, das die Realisierung von visuell ansprechenden Kommandozeileninterfaces zu erleichtern sucht.
7 Minuten
29. Okt 2025
Loggingdaten-Einlaufstelle mit Komfortfunktionen - Best of NuGet, Teil 5
Die in Android implementierte Logging-Funktion ist ein leistungsfähiges Beispiel für moderne Logging-Systeme. Mit Serilog steht ein ähnliches System für .NET-Applikationen zur Verfügung, das allerdings einige weit über das große Vorbild hinausgehende Funktionen offeriert.
6 Minuten
22. Okt 2025
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige