Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
Die beiden Steuer-elemente TextBox und TextBlock reichen für die Darstellung einfacher Texte aus. Wenn die Texte jedoch formatiert oder sogar strukturiert dargestellt werden sollen, brauchen wir eine Alternative. Im Artikel “FlowDocument-Elemente mit XAML” haben Sie bereits das FlowDocument-Element kennen gelernt, das viele Möglichkeiten bietet einschließlich Absätze, Inline-Formatierungen, Listen, Tabellen und Abbildungen. Nun wollen wir uns ansehen, wie uns das RichTextBox-Steuerelement dabei unterstützen kann, diese Art von Dokumenten zu bearbeiten.
FlowDocument als Inhalt von RichTextBox-Steuerelementen
RichTextBox-Steuerelemente enthalten immer ein FlowDocument-Element als Inhalt. Wenn Sie also Text in ein solches Steuerlement eingeben, dann wird dieser Text im Hintergrund als Inhalt eines FlowDocument-Elements gespeichert.
Ein FlowDocument, das haben wir bereits im Artikel FlowDocument-Elemente mit XAML beschrieben, ist im Prinzip ein XML-Dokument, das sowohl den Inhalt als auch die Formatierungen und die Strukturierung des Dokuments enthält.
Wir wollen ein Fenster erzeugen, dass in einem Grid ein Label und ein RichTextBox-Steuerelement enthält. Dieses RichTextBox-Element soll den Inhalt eines der FlowDocument-Elemente, die wir im oben genannten Artikel erzeugt haben, darstellen (siehe Bild 1). Dazu nutzen wir den folgenden Code:
Bild 1: RichTextBox-Element mit formatiertem Text, der sich aber nicht formatieren lässt
<Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="*"></RowDefinition> </Grid.RowDefinitions> <Label Grid.Row="0" Margin="5">RichTextBox-Steuerelement mit vorgegebenem Inhalt:</Label> <RichTextBox Grid.Row="1" Margin="5"> <FlowDocument IsOptimalParagraphEnabled="True" IsHyphenationEnabled="True" TextAlignment="Left"> <Paragraph FontSize="16" FontFamily="Arial" FontWeight="Bold">Zwischenüberschrift</Paragraph> ... </FlowDocument> </RichTextBox> </Grid>
Wir haben hier direkt den Beispielcode aus dem Artikel FlowDocument-Elemente mit XAML (www.datenbankentwickler.net/203) in den Code integriert, damit wir direkt Text zum Herumprobieren haben. Im Artikel FlowDocument-Elemente mit VB (www.datenbankentwickler.net/210) zeigen wir, wie Sie FlowDocument-Elemente per VB mit Inhalt füllen, diese auslesen oder bearbeiten.
Leider zeigt das RichTextBox-Element in der aktuellen Konfiguration keine Steuer-elemente zum Formatieren des Textes an – zunächst keine offensichtlichen, aber auch keine über das Kontextmenü. Außerdem sehen wir in der Abbildung auch direkt, dass sich das RichTextBox-Element deutlich von den Steuerelementen zur Anzeige von FlowDocument-Elementen unterscheidet. Der Inhalt wird immer in einer Spalte angezeigt, es gibt keine Zoom- und auch keine Suchfunktion.
Wir haben es also mit einem Steuerelement rein zum Bearbeiten des Inhalts zu tun. Damit Sie den enthaltenen Text auch in gewohnter Form bearbeiten können, fügen wir im Artikel Format-Menü für die RichTextBox (www.datenbankentwickler.net/205) ein passendes Menü hinzu.
RichTextBox-Steuerelement leeren
Wenn Sie mit einem leeren RichTextBox-Steuerelement fortfahren wollen, können Sie das schnell erledigen, indem Sie den kompletten Inhalt markieren (mit Strg + A) und dann die Entf-Taste betätigen. Sie finden dann ein leeres RichTextBox-Steuerelement vor (siehe Bild 2).
Bild 2: Geleertes RichTextBox-Steuerelement
Kompletten Inhalt markieren
Wir wollen zeigen, wie Sie per VB den kompletten Inhalt des RichTextBox-Steuerelements markieren. Dazu fügen wir eine erste Schaltfläche oberhalb des RichTextBox-Steuerelements hinzu, die wir wie folgt in ein StackPanel-Element mit horizontaler Ausrichtung einschließen:
<StackPanel Orientation="Horizontal" Grid.Row="1"> <Button x:Name="btnAllesMarkieren" Click="BtnAllesMarkieren_Click">Alles markieren</Button> </StackPanel>
Die Ereignismethode enthält den Aufruf der SelectAll-Methode des RichTextBox-Steuerelements sowie die Anweisung zum Verschieben des Fokus auf dieses Steuer-element (siehe Bild 3).
Bild 3: Markieren des vollständigen Inhalts des RichTextBox-Steuerelements
Die SelectAll-Methode reicht zwar aus, um den Inhalt des RichTextBox-Steuerelements zu markieren, aber solange das Steuer-element nicht den Fokus hat, wird die Markierung nicht angezeigt. Daher müssen wir noch den Fokus auf das RichTextBox-Element verschieben.
Private Sub BtnAllesMarkieren_Click(...) rtb.SelectAll() rtb.Focus() End Sub
Text ausgeben
Um den vollständigen Text auszugeben, müssen wir einen etwas anderen Weg gehen als etwa bei einem Textfeld. Hier reicht es, über das Text-Attribut auf den Inhalt zuzugreifen.