Entwickler-Ecke

WPF / Silverlight - Flow Dokument formatieren ...


DarkWinter - Di 10.08.21 16:07
Titel: Flow Dokument formatieren ...
Hi

möchte mir zum ersten Mal ein Flow-Dokument zusammenbauen - es wird auch im FlowDocumentScollViewer angezeigt

bzw. hab es geschafft es auch auszudrucken --> aber mit der Formatierung klappt es irgendwie nicht - hab schon mehrere Seiten abgeklappert


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
FlowDocument doc = new FlowDocument();

Paragraph p = new Paragraph(new Run("Orte"));
p.FontSize = 38;
p.TextAlignment = TextAlignment.Center;
            
doc.Blocks.Add(p);

p.Foreground = Brushes.Red;
for (int ra = 0; ra < OrteStr.Length; ra++)
{
    p = new Paragraph();
    p.FontSize = 28;
    p.FontStyle = FontStyles.Normal;

    p.TextAlignment = TextAlignment.Center;
    p.Inlines.Add(new Run(OrteStr[ra]));

    doc.Blocks.Add(p);
}

fdViewer.Document = doc;


Vom Verständnis her ist ein Paragraph ein Absatz also ein Block mit mehreren Zeilen.
Wenn ich die Zeile doc.Blocks.Add(p); außerhalb der Schleife platziere wird nur der letzte Eintrag ins Flow Dokument eingefügt.

Lasse ich es so wie oben, haben die einzelnen Zeilen einen großen Abstand - so als wenn jede Zeile ein Absatz ist (bzw. zwei CR eingefügt werden).
Wie kann ich den Text untereinander platzieren bzw. den Abstand der Zeilen zueinander einstellen?
Oder anders gefragt: Wie kriege ich einen Absatz mit mehreren Zeilen?

Gruß

Moderiert von user profile iconTh69: Beitragsformatierung (Code) überarbeitet.


Th69 - Di 10.08.21 16:46

Hallo,

hast du schon Übersicht über Flussdokumente [https://docs.microsoft.com/de-de/dotnet/desktop/wpf/advanced/flow-document-overview] durchgearbeitet?
Teste mal das 2. Beispiel ("Bereich") unter "Flussbezogene Klassen" / "Blockabgeleitete Klassen".

Wenn du jedoch nur einen Absatz haben möchtest, dann darfst du auch nur einen Paragraph hinzufügen (also p = new Paragraph() vor der Schleife) und innerhalb der Schleife nur den Text (mittels p.Inlines.Add(...)) erzeugen (und für Zeilenumbrüche LineBreak [https://docs.microsoft.com/de-de/dotnet/api/system.windows.documents.linebreak] verwenden).