TOC

This article has been localized into German by the community.

Rich Text Steuerelemente:

Erweiterter FlowDocument Inhalt

Wie ich schon erwähnt habe, sind die Möglichkeiten der Textdarstellung in WPF zusammen mit dem FlowDocument enorm. Sie können fast alles damit mit machen, wie Listen, Bilder und sogar Tabellen hinzufügen. So weit haben wir uns nur mit dem grundlegenden Inhalt des FlowDocument beschäftigt, doch in diesem Artikel werden wir uns umfassender damit auseinander setzen.

The XAML Code für das nächste Beispiel sieht ein wenig komplex aus, doch beachten Sie, wie einfach er im Grunde doch ist. Es ist wie in HTML, wo Sie Text formatieren können, indem Sie ihn in Absätze verpacken und diese mit Styles versehen. Schauen Sie sich den XAML Code an und das darauffolgende Bild mit dem Ergebnis:

<Window x:Class="WpfTutorialSamples.Rich_text_controls.ExtendedFlowDocumentSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ExtendedFlowDocumentSample" Height="550" Width="500">
    <Grid>
        <FlowDocumentScrollViewer>
            <FlowDocument>
                <Paragraph>
                    <Image Source="http://www.wpf-tutorial.com/images/logo.png" Width="90" Height="90" Margin="0,0,30,0" />
                    <Run FontSize="120">WPF</Run>
                </Paragraph>

                <Paragraph>
                    WPF, which stands for
                    <Bold>Windows Presentation Foundation</Bold>,
                    is Microsoft's latest approach to a GUI framework, used with the .NET framework.
                    Some advantages include:
                </Paragraph>

                <List>
                    <ListItem>
                        <Paragraph>
                            It's newer and thereby more in tune with current standards
                        </Paragraph>
                    </ListItem>
                    <ListItem>
                        <Paragraph>
                            Microsoft is using it for a lot of new applications, e.g. Visual Studio
                        </Paragraph>
                    </ListItem>
                    <ListItem>
                        <Paragraph>
                            It's more flexible, so you can do more things without having to write or buy new controls
                        </Paragraph>
                    </ListItem>
                </List>

                <Table CellSpacing="0">
                    <TableRowGroup>
                        <TableRow Background="Gainsboro" FontWeight="Bold">
                            <TableCell></TableCell>
                            <TableCell>
                                <Paragraph TextAlignment="Right">WinForms</Paragraph>
                            </TableCell>
                            <TableCell>
                                <Paragraph TextAlignment="Right">WPF</Paragraph>
                            </TableCell>
                        </TableRow>
                    </TableRowGroup>

                    <TableRowGroup>
                        <TableRow>
                            <TableCell Background="Gainsboro" FontWeight="Bold">
                                <Paragraph>Lines of code</Paragraph>
                            </TableCell>
                            <TableCell>
                                <Paragraph TextAlignment="Right">1.718.000</Paragraph>
                            </TableCell>
                            <TableCell>
                                <Paragraph TextAlignment="Right">1.542.000</Paragraph>
                            </TableCell>
                        </TableRow>
                    </TableRowGroup>
                    <TableRowGroup>
                        <TableRow>
                            <TableCell Background="Gainsboro" FontWeight="Bold">
                                <Paragraph>Developers</Paragraph>
                            </TableCell>
                            <TableCell>
                                <Paragraph TextAlignment="Right">633.000</Paragraph>
                            </TableCell>
                            <TableCell>
                                <Paragraph TextAlignment="Right">981.000</Paragraph>
                            </TableCell>
                        </TableRow>
                    </TableRowGroup>
                </Table>
                <Paragraph Foreground="Silver" FontStyle="Italic">A table of made up WinForms/WPF numbers</Paragraph>
            </FlowDocument>
        </FlowDocumentScrollViewer>
    </Grid>
</Window>

Ich gehe hier nicht allzusehr ins Detail zu den einzelnen Tags und hoffe, dass sie sich selbst erklären.

Wie Sie sehen können, sind Listen, Bilder und Tabellen ziemlich einfach, aber tatsächlich können Sie jedes WPF-Steuerelement in Ihr FlowDocument einfügen. Mit dem BlockUIContainer-Element erhalten Sie Zugriff auf alle Controls, die sonst nur innerhalb eines Fensters verfügbar wären. Hier ist ein Beispiel:

<Window x:Class="WpfTutorialSamples.Rich_text_controls.BlockUIContainerSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:self="clr-namespace:WpfTutorialSamples.Rich_text_controls"
        Title="BlockUIContainerSample" Height="275" Width="300">
    <Window.Resources>
        <x:Array x:Key="UserArray" Type="{x:Type self:User}">
            <self:User Name="John Doe" Age="42"/>
            <self:User Name="Jane Doe" Age="36"/>
        </x:Array>
    </Window.Resources>
    <Grid>
        <FlowDocumentScrollViewer>
            <FlowDocument>
                <Paragraph FontSize="36" Margin="0">Users</Paragraph>
                <Paragraph FontStyle="Italic" TextAlignment="Left" FontSize="14" Foreground="Gray">Here's a list of our users, inside our FlowDocument, in a completely interactive ListView control!</Paragraph>
                <BlockUIContainer>
                    <ListView BorderThickness="0" ItemsSource="{StaticResource UserArray}">
                        <ListView.View>
                            <GridView>
                                <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" Width="150" />
                                <GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}" Width="75" />
                            </GridView>
                        </ListView.View>
                    </ListView>
                </BlockUIContainer>
                <Paragraph FontStyle="Italic" TextAlignment="Left" FontSize="14" Foreground="Gray">More content can go here...</Paragraph>
            </FlowDocument>
        </FlowDocumentScrollViewer>
    </Grid>
</Window>

Jetzt haben wir ein FlowDocument mit einem ListView darin, und wie Sie auf dem Screenshot sehen können, funktioniert der ListView wie gewohnt, inklusive Auswahlen etc. Ziemlich cool!

Zusammenfassung

Durch die Verwendung der Techniken, die in den beiden Beispielen dieses Artikels beschrieben sind, ist mit FlowDocument-Dokumente so ziemlich alles möglich. Es eignet sich hervorragend, um dem Endbenutzer visuelle Informationen zu präsentieren, wie es in vielen der teuren Reporting-Paketen der Fall ist.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!