Zum Inhalt
Kuonen.UI

FlowDocumentReader

Ein fliessendes Dokument lesen: als Seiten (eine oder zwei), rollend, mit Zoom und Suche (Strg+F, F3). Absätze, Listen und Tabellen werden gesetzt und umbrochen; Drucken umbricht neu auf das gewählte Papier.

Vorführung: FlowDocumentReaderVorführung: FlowDocumentReader

KXAML

FlowDocumentLeserSeite.kxaml
<StackPanel xmlns="https://ui.kuonen.org/kxaml"
            xmlns:x="https://ui.kuonen.org/kxaml/x"
            xmlns:dok="using:Kuonen.UI.Controls.Dokumente"
            x:Class="Kuonen.UI.Galerie.Seiten.FlowDocumentLeserVorfuehrung"
            Spacing="8">
  <!-- Dokument und Knöpfe füllt FlowDocumentLeserSeite.Fuelle, dieselbe Methode wie die C#-Fassung. -->
  <StackPanel x:Name="Leiste" Orientation="Horizontal" Spacing="6" />
  <dok:FlowDocumentReader x:Name="Leser" Height="420" Width="620" />
  <TextBlock x:Name="Meldung" />
</StackPanel>
FlowDocumentLeserSeite.kxaml.cs
using Kuonen.UI;

namespace Kuonen.UI.Galerie.Seiten;

public sealed partial class FlowDocumentLeserSeite
{
    protected override Func<UIElement>? KxamlFabrik => () => new FlowDocumentLeserVorfuehrung();
}

/// <summary>KXAML-Fassung der Seite FlowDocumentReader: das Gerüst steht in FlowDocumentLeserSeite.kxaml, das Innere füllt FlowDocumentLeserSeite.Fuelle.</summary>
public sealed partial class FlowDocumentLeserVorfuehrung
{
    public FlowDocumentLeserVorfuehrung()
    {
        InitializeComponent();
        FlowDocumentLeserSeite.Fuelle(Leiste, Leser, Meldung);
    }
}

C#

FlowDocumentLeserSeite.cs
using Kuonen.UI;
using Kuonen.UI.Controls;
using Kuonen.UI.Controls.Dokumente;
using Kuonen.UI.Layout;

namespace Kuonen.UI.Galerie.Seiten;

/// <summary>Galerie-Seite: FlowDocumentReader mit Seiten, zwei Seiten und rollend, Zoom, Suche und Drucken (Plan 6i).</summary>
public sealed partial class FlowDocumentLeserSeite : GalerieSeite
{
    public override string Titel => "FlowDocumentReader";

    public override string Beschreibung =>
        "Ein fliessendes Dokument lesen: als Seiten (eine oder zwei), rollend, mit Zoom und Suche (Strg+F, F3). Absätze, Listen und Tabellen werden gesetzt " +
        "und umbrochen; Drucken umbricht neu auf das gewählte Papier.";

    public override string Stichworte => "FlowDocumentReader FlowDocumentPageViewer FlowDocumentScrollViewer FlowDocument Seiten Zoom Suche Drucken Paginator";

    public override string Datei => nameof(FlowDocumentLeserSeite);

    public override UIElement Baue()
    {
        var seite = new StackPanel { Spacing = 8 };
        var leiste = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 6 };
        var leser = new FlowDocumentReader { Height = 420, Width = 620 };
        var meldung = new TextBlock();
        Fuelle(leiste, leser, meldung);
        seite.Children.Add(leiste);
        seite.Children.Add(leser);
        seite.Children.Add(meldung);
        return seite;
    }

    /// <summary>Dokument und Knöpfe (auch von der KXAML-Fassung benutzt).</summary>
    public static void Fuelle(StackPanel leiste, FlowDocumentReader leser, TextBlock meldung)
    {
        leser.Document = Beispieldokument.Baue();
        foreach (var (text, modus) in new[] { ("Seite", FlowDocumentReaderViewingMode.Page), ("Zwei Seiten", FlowDocumentReaderViewingMode.TwoPage), ("Rollend", FlowDocumentReaderViewingMode.Scroll) })
        {
            var k = new Button { Content = text };
            k.Click += (_, _) => leser.ViewingMode = modus;
            leiste.Children.Add(k);
        }
        var drucken = new Button { Content = "Drucken" };
        drucken.Click += async (_, _) => meldung.Text = await leser.PrintAsync() ? "Gedruckt." : "Nicht gedruckt.";
        leiste.Children.Add(drucken);
    }
}