Kannst du mal einen Screenshot zeigen?
Die Zeilenhöhe wird wohl automatisch vom Zeichensatz bestimmt. Bei Shift+Enter sollte aber der Zeilenabstand so sein, daß nur einige Leerpixel zwischen den Zeilen sind.
Welchen Zeichensatz (+ Größe) hast du denn eingestellt?
ChapGPT hat mir folgende Antwort auf die Frage "Bei einer WPF-RichTextBox für reine Editierung durch den Anwender soll der Zeilenabstand verringert werden (ohne daß `Paragraph` im XAML vorgegeben ist)." gegeben:
Ja, das geht – du musst nur **zur Laufzeit an das `FlowDocument` bzw. die `Paragraphs` ran**, weil bei einer leeren `RichTextBox` nichts im XAML definiert ist.
Der entscheidende Punkt:
Auch ohne XAML erzeugt die `RichTextBox` intern automatisch ein `FlowDocument` mit mindestens einem `Paragraph`.
---
## ✅ Lösung: Default-Paragraph manipulieren
### 🔹 Einfachster Ansatz (nach Laden)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var doc = richTextBox.Document;
foreach (var block in doc.Blocks) { if (block is Paragraph p) { p.LineHeight = 12; p.LineStackingStrategy = LineStackingStrategy.BlockLineHeight; p.Margin = new Thickness(0); } } |
---
## ⚠️ Problem: Neue Absätze!
Sobald der Nutzer Enter drückt, entstehen neue `Paragraph`-Objekte – die haben wieder Standardwerte.
👉 Deshalb brauchst du eine **dauerhafte Lösung**.
---
## ✅ Bessere Lösung: Default-Style für Paragraph setzen
Du kannst dem `FlowDocument` einen Style geben:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var style = new Style(typeof(Paragraph));
style.Setters.Add(new Setter(Paragraph.LineHeightProperty, 12.0)); style.Setters.Add(new Setter(Paragraph.LineStackingStrategyProperty, LineStackingStrategy.BlockLineHeight)); style.Setters.Add(new Setter(Paragraph.MarginProperty, new Thickness(0)));
richTextBox.Document.Resources.Add(typeof(Paragraph), style); |
👉 Vorteil:
* Gilt automatisch für **alle bestehenden und zukünftigen Paragraphs**
* Kein Nacharbeiten nötig
---
## 🧠 Alternative (global im App.xaml)
Wenn du das überall willst:
XML-Daten
1: 2: 3: 4: 5: 6: 7:
| <Application.Resources> <Style TargetType="Paragraph"> <Setter Property="LineHeight" Value="12"/> <Setter Property="LineStackingStrategy" Value="BlockLineHeight"/> <Setter Property="Margin" Value="0"/> </Style> </Application.Resources> |
---
## 💡 Tipps
* Typische Werte: `LineHeight ≈ FontSize * 1.0–1.2`
* Wenn es „zu gequetscht“ wirkt → leicht erhöhen
* Ohne `BlockLineHeight` ignoriert WPF oft kleine Werte
---
## 🧾 Kurzfazit
* ✔ Kein XAML nötig
* ✔ Über `Document.Resources` steuerbar
* ✔ Funktioniert auch für neu eingegebenen Text
---