Übersicht über RichTextBoxRichTextBox Overview

Das- RichTextBox Steuerelement ermöglicht es Ihnen, fortlaufenden Inhalt einschließlich Absätzen, Bilder, Tabellen usw. anzuzeigen oder zu bearbeiten.The RichTextBox control enables you to display or edit flow content including paragraphs, images, tables, and more. Dieses Thema TextBox enthält eine Einführung in die-Klasse und bietet Beispiele für die Verwendung in Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML) und c#.This topic introduces the TextBox class and provides examples of how to use it in both Extensible Application Markup Language (XAML)Extensible Application Markup Language (XAML) and C#.

TextBox oder RichTextBox?TextBox or RichTextBox?

Sowohl RichTextBox als auch TextBox ermöglichen es Benutzern, Text zu bearbeiten. die beiden Steuerelemente werden jedoch in verschiedenen Szenarien verwendet.Both RichTextBox and TextBox allow users to edit text, however, the two controls are used in different scenarios. Eine RichTextBox ist eine bessere Wahl, wenn der Benutzer formatierten Text, Bilder, Tabellen oder andere Rich-Inhalte bearbeiten muss.A RichTextBox is a better choice when it is necessary for the user to edit formatted text, images, tables, or other rich content. Beispielsweise wird das Bearbeiten eines Dokuments, Artikels oder Blogs, das Formatierungen, Bilder usw. erfordert, am besten mit einem erreicht RichTextBox .For example, editing a document, article, or blog that requires formatting, images, etc is best accomplished using a RichTextBox. Ein TextBox benötigt weniger Systemressourcen als eine RichTextBox und ist ideal, wenn nur nur-Text bearbeitet werden muss (d. h. die Verwendung in Formularen).A TextBox requires less system resources then a RichTextBox and it is ideal when only plain text needs to be edited (i.e. usage in forms). Weitere Informationen zu finden Sie unter Übersicht über TextBox TextBox .See TextBox Overview for more information on TextBox. In der folgenden Tabelle werden die Hauptfunktionen von und zusammengefasst TextBox RichTextBox .The table below summarizes the main features of TextBox and RichTextBox.

ControlControl Rechtschreibprüfung in EchtzeitReal-time Spellchecking KontextmenüContext Menu Formatieren von Befehlen wie ToggleBold (CTR + B)Formatting commands like ToggleBold (Ctr+B) FlowDocument Inhalt wie Bilder, Absätze, Tabellen usw.FlowDocument content like images, paragraphs, tables, etc.
TextBox JaYes JaYes NeinNo Nein.No.
RichTextBox JaYes JaYes JaYes JaYes

Hinweis

Obwohl TextBox das Formatieren von zugehörigen Befehlen wie ToggleBold (CTR + B) nicht unterstützt, werden viele grundlegende Befehle von beiden Steuerelementen wie unterstützt MoveToLineEnd .Although TextBox does not support formatting related commands like ToggleBold (Ctr+B), many basic commands are supported by both controls such as MoveToLineEnd.

Die Funktionen aus der obigen Tabelle werden später ausführlicher behandelt.The features from the table above are covered in more detail later.

Erstellen eines RichTextBox-SteuerelementsCreating a RichTextBox

Der folgende Code zeigt, wie ein erstellt wird RichTextBox , in dem ein Benutzer Rich-Content bearbeiten kann.The code below shows how to create a RichTextBox that a user can edit rich content in.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <!-- A RichTextBox with no initial content in it. -->
    <RichTextBox />

</Page>

Insbesondere ist der Inhalt, der in einem bearbeitet wird, der fortlaufende RichTextBox Inhalt.Specifically, the content edited in a RichTextBox is flow content. Fortlaufender Inhalt kann viele Arten von Elementen enthalten, darunter formatierten Text, Bilder, Listen und Tabellen.Flow content can contain many types of elements including formatted text, images, lists, and tables. Ausführliche Informationen zu Flussdokumenten finden Sie unter Übersicht über Flussdokumente.See Flow Document Overview for in depth information on flow documents. Um fortlaufenden Inhalt zu enthalten, RichTextBox hostet ein- FlowDocument Objekt, das wiederum den bearbeitbaren Inhalt enthält.In order to contain flow content, a RichTextBox hosts a FlowDocument object which in turn contains the editable content. Zum Veranschaulichen von fortlaufendem Inhalt in einem RichTextBox zeigt der folgende Code, wie ein RichTextBox mit einem Absatz und einem fett formatierten Text erstellt wird.To demonstrate flow content in a RichTextBox, the following code shows how to create a RichTextBox with a paragraph and some bolded text.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <StackPanel>
    <RichTextBox>
      <FlowDocument>
        <Paragraph>
          This is flow content and you can <Bold>edit me!</Bold>
        </Paragraph>
      </FlowDocument>
    </RichTextBox>
  </StackPanel>

</Page>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Documents;
namespace SDKSample
{
    public partial class BasicRichTextBoxWithContentExample : Page
    {
        public BasicRichTextBoxWithContentExample()
        {
            StackPanel myStackPanel = new StackPanel();

            // Create a FlowDocument to contain content for the RichTextBox.
            FlowDocument myFlowDoc = new FlowDocument();

            // Create a Run of plain text and some bold text.
            Run myRun = new Run("This is flow content and you can ");
            Bold myBold = new Bold(new Run("edit me!"));

            // Create a paragraph and add the Run and Bold to it.
            Paragraph myParagraph = new Paragraph();
            myParagraph.Inlines.Add(myRun);
            myParagraph.Inlines.Add(myBold);

            // Add the paragraph to the FlowDocument.
            myFlowDoc.Blocks.Add(myParagraph);

            RichTextBox myRichTextBox = new RichTextBox();

            // Add initial content to the RichTextBox.
            myRichTextBox.Document = myFlowDoc;

            myStackPanel.Children.Add(myRichTextBox);
            this.Content = myStackPanel;
        }
    }
}

Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Media
Imports System.Windows.Documents
Namespace SDKSample
    Partial Public Class BasicRichTextBoxWithContentExample
        Inherits Page
        Public Sub New()
            Dim myStackPanel As New StackPanel()

            ' Create a FlowDocument to contain content for the RichTextBox.
            Dim myFlowDoc As New FlowDocument()

            ' Create a Run of plain text and some bold text.
            Dim myRun As New Run("This is flow content and you can ")
            Dim myBold As New Bold(New Run("edit me!"))

            ' Create a paragraph and add the Run and Bold to it.
            Dim myParagraph As New Paragraph()
            myParagraph.Inlines.Add(myRun)
            myParagraph.Inlines.Add(myBold)

            ' Add the paragraph to the FlowDocument.
            myFlowDoc.Blocks.Add(myParagraph)

            Dim myRichTextBox As New RichTextBox()

            ' Add initial content to the RichTextBox.
            myRichTextBox.Document = myFlowDoc

            myStackPanel.Children.Add(myRichTextBox)
            Me.Content = myStackPanel

        End Sub
    End Class
End Namespace

Die folgende Abbildung zeigt, wie dieses Beispiel gerendert wird.The following illustration shows how this sample renders.

RichTextBox mit InhaltRichTextBox with content

Elemente wie Paragraph und Bold bestimmen, wie der Inhalt in einer RichTextBox angezeigt wird.Elements like Paragraph and Bold determine how the content inside a RichTextBox appears. Wenn ein Benutzer Inhalt bearbeitet RichTextBox , ändert er diesen fortlaufenden Inhalt.As a user edits RichTextBox content, they change this flow content. Weitere Informationen über die Funktionen von fortlaufendem Inhalt und das Arbeiten damit finden Sie unter Übersicht über Flussdokumente.To learn more about the features of flow content and how to work with it, see Flow Document Overview.

Hinweis

Fortlaufendem Inhalt in einem RichTextBox verhält sich nicht genau wie fortlaufenden Inhalt in anderen Steuerelementen.Flow content inside a RichTextBox does not behave exactly like flow content contained in other controls. Beispielsweise gibt es keine Spalten in einem RichTextBox und somit kein automatisches Verhalten bei der Änderung der Größe.For example, there are no columns in a RichTextBox and hence no automatic resizing behavior. Außerdem sind integrierte Features wie suchen, Anzeigemodus, Seitennavigation und Zoom nicht in verfügbar RichTextBox .Also, built in features like search, viewing mode, page navigation, and zoom are not available within a RichTextBox.

Rechtschreibprüfung in EchtzeitReal-time Spell Checking

Sie können die Rechtschreibprüfung in Echtzeit in oder aktivieren TextBox RichTextBox .You can enable real-time spell checking in a TextBox or RichTextBox. Wenn die Rechtschreibprüfung aktiviert ist, wird eine rote Linie unter falsch geschriebenen Wörtern angezeigt (siehe Abbildung unten).When spellchecking is turned on, a red line appears underneath any misspelled words (see picture below).

TextBox mit Rechtschreib-ÜberprüfungTextbox with spell-checking

Wie Sie die Rechtschreibprüfung aktivieren, erfahren Sie unter Aktivieren der Rechtschreibprüfung in einem Textbearbeitungssteuerelement.See Enable Spell Checking in a Text Editing Control to learn how to enable spellchecking.

KontextmenüContext Menu

Standardmäßig verfügen sowohl TextBox als auch RichTextBox über ein Kontextmenü, das angezeigt wird, wenn ein Benutzer mit der rechten Maustaste auf das Steuerelement klickt.By default, both TextBox and RichTextBox have a context menu that appears when a user right-clicks inside the control. Das Kontextmenü ermöglicht dem Benutzer das Ausschneiden, Kopieren und Einfügen (siehe Abbildung unten).The context menu allows the user to cut, copy, or paste (see illustration below).

TextBox mit KontextmenüTextBox with context menu

Sie können Ihr eigenes benutzerdefiniertes Kontextmenü erstellen, um den Standard zu überschreiben.You can create your own custom context menu to override the default one. Weitere Informationen finden Sie unter Positionieren eines benutzerdefinierten Kontextmenüs in einem „RichTextBox“-Element.See Position a Custom Context Menu in a RichTextBox for more information.

BearbeitungsbefehleEditing Commands

Bearbeitungsbefehle ermöglichen es Benutzern, bearbeitbaren Inhalt in einem zu formatieren RichTextBox .Editing commands enable users to format editable content inside a RichTextBox. Neben grundlegenden Bearbeitungs Befehlen RichTextBox schließt Formatierungsbefehle ein, die von TextBox nicht unterstützt werden.Besides basic editing commands, RichTextBox includes formatting commands that TextBox does not support. Wenn z RichTextBox . B. in einem bearbeitet wird, könnte ein Benutzer CTR + B drücken, um die Fett formatierte Textformatierung zu ändern.For example, when editing in a RichTextBox, a user could press Ctr+B to toggle bold text formatting. EditingCommandsEine komplette Liste der verfügbaren Befehle finden Sie unter.See EditingCommands for a complete list of commands available. Zusätzlich zu Tastenkombinationen können Sie Befehle mit anderen Steuerelementen wie Schaltflächen verknüpfen.In addition to using keyboard shortcuts, you can hook commands up to other controls like buttons. Im folgenden Beispiel wird veranschaulicht, wie eine einfache Symbolleiste mit Schaltflächen erstellt wird, mit denen der Benutzer die Textformatierung ändern kann.The following example shows how to create a simple tool bar containing buttons that the user can use to change text formatting.

<Window x:Class="RichTextBoxInputPanelDemo.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="400" Width="600"
    >
  <Grid>

    <!-- Set the styles for the tool bar. -->
    <Grid.Resources>
      <Style TargetType="{x:Type Button}" x:Key="formatTextStyle">
        <Setter Property="FontFamily" Value="Palatino Linotype"></Setter>
        <Setter Property="Width" Value="30"></Setter>
        <Setter Property="FontSize" Value ="14"></Setter>
        <Setter Property="CommandTarget" Value="{Binding ElementName=mainRTB}"></Setter>
      </Style>

      <Style TargetType="{x:Type Button}" x:Key="formatImageStyle">
        <Setter Property="Width" Value="30"></Setter>
        <Setter Property="CommandTarget" Value="{Binding ElementName=mainRTB}"></Setter>
      </Style>
    </Grid.Resources>

    <DockPanel Name="mainPanel">

      <!-- This tool bar contains all the editing buttons. -->
      <ToolBar Name="mainToolBar" Height="30" DockPanel.Dock="Top">

        <Button Style="{StaticResource formatImageStyle}" Command="ApplicationCommands.Cut" ToolTip="Cut">
          <Image Source="Images\EditCut.png"></Image>
        </Button>
        <Button Style="{StaticResource formatImageStyle}" Command="ApplicationCommands.Copy" ToolTip="Copy">
          <Image Source="Images\EditCopy.png"></Image>
        </Button>
        <Button Style="{StaticResource formatImageStyle}" Command="ApplicationCommands.Paste" ToolTip="Paste">
          <Image Source="Images\EditPaste.png"></Image>
        </Button>
        <Button Style="{StaticResource formatImageStyle}" Command="ApplicationCommands.Undo" ToolTip="Undo">
          <Image Source="Images\EditUndo.png"></Image>
        </Button>
        <Button Style="{StaticResource formatImageStyle}" Command="ApplicationCommands.Redo" ToolTip="Redo">
          <Image Source="Images\EditRedo.png"></Image>
        </Button>

        <Button Style="{StaticResource formatTextStyle}" Command="EditingCommands.ToggleBold" ToolTip="Bold">
          <TextBlock FontWeight="Bold">B</TextBlock>
        </Button>
        <Button Style="{StaticResource formatTextStyle}" Command="EditingCommands.ToggleItalic" ToolTip="Italic">
          <TextBlock FontStyle="Italic" FontWeight="Bold">I</TextBlock>
        </Button>
        <Button Style="{StaticResource formatTextStyle}" Command="EditingCommands.ToggleUnderline" ToolTip="Underline">
          <TextBlock TextDecorations="Underline" FontWeight="Bold">U</TextBlock>
        </Button>
        <Button Style="{StaticResource formatImageStyle}" Command="EditingCommands.IncreaseFontSize" ToolTip="Grow Font">
          <Image Source="Images\CharacterGrowFont.png"></Image>
        </Button>
        <Button Style="{StaticResource formatImageStyle}" Command="EditingCommands.DecreaseFontSize" ToolTip="Shrink Font">
          <Image Source="Images\CharacterShrinkFont.png"></Image>
        </Button>

        <Button Style="{StaticResource formatImageStyle}" Command="EditingCommands.ToggleBullets" ToolTip="Bullets">
          <Image Source="Images\ListBullets.png"></Image>
        </Button>
        <Button Style="{StaticResource formatImageStyle}" Command="EditingCommands.ToggleNumbering" ToolTip="Numbering">
          <Image Source="Images/ListNumbering.png"></Image>
        </Button>
        <Button Style="{StaticResource formatImageStyle}" Command="EditingCommands.AlignLeft" ToolTip="Align Left">
          <Image Source="Images\ParagraphLeftJustify.png"></Image>
        </Button>
        <Button Style="{StaticResource formatImageStyle}" Command="EditingCommands.AlignCenter" ToolTip="Align Center">
          <Image Source="Images\ParagraphCenterJustify.png"></Image>
        </Button>
        <Button Style="{StaticResource formatImageStyle}" Command="EditingCommands.AlignRight" ToolTip="Align Right">
          <Image Source="Images\ParagraphRightJustify.png"></Image>
        </Button>
        <Button Style="{StaticResource formatImageStyle}" Command="EditingCommands.AlignJustify" ToolTip="Align Justify">
          <Image Source="Images\ParagraphFullJustify.png"></Image>
        </Button>
        <Button Style="{StaticResource formatImageStyle}" Command="EditingCommands.IncreaseIndentation" ToolTip="Increase Indent">
          <Image Source="Images\ParagraphIncreaseIndentation.png"></Image>
        </Button>
        <Button Style="{StaticResource formatImageStyle}" Command="EditingCommands.DecreaseIndentation" ToolTip="Decrease Indent">
          <Image Source="Images\ParagraphDecreaseIndentation.png"></Image>
        </Button>

      </ToolBar>

      <!-- By default pressing tab moves focus to the next control. Setting AcceptsTab to true allows the 
           RichTextBox to accept tab characters. -->
      <RichTextBox Name="mainRTB" AcceptsTab="True"></RichTextBox>
    </DockPanel>
  </Grid>
</Window>

Die folgende Abbildung zeigt, wie dieses Beispiel angezeigt wird.The following illustration shows how this sample displays.

RichTextBox mit ToolBarRichTextBox with ToolBar

Erkennen, wenn Inhalt geändert wirdDetect when Content Changes

In der Regel sollte das- TextChanged Ereignis verwendet werden, um zu erkennen, wann immer der Text in einer-oder-Datei TextBox geändert wird RichTextBox KeyDown .Usually the TextChanged event should be used to detect whenever the text in a TextBox or RichTextBox changes rather then KeyDown as you might expect. Ein Beispiel finden Sie unter Erkennen von Änderungen an Text in einem Textfeld.See Detect When Text in a TextBox Has Changed for an example.

Speichern, Laden und Drucken von RichTextBox-InhaltSave, Load, and Print RichTextBox Content

Im folgenden Beispiel wird gezeigt, wie Inhalt eines RichTextBox in einer Datei gespeichert, der Inhalt wieder in das geladen RichTextBox und der Inhalt gedruckt wird.The following example shows how to save content of a RichTextBox to a file, load that content back into the RichTextBox, and print the contents. Im Folgenden sehen Sie das Markup für das Beispiel.Below is the markup for the example.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="SDKSample.SaveLoadPrintRTB" >

  <StackPanel>
    <RichTextBox Name="richTB">
      <FlowDocument>
        <Paragraph>
          <Run>Paragraph 1</Run>
        </Paragraph>
      </FlowDocument>
    </RichTextBox>

    <Button Click="SaveRTBContent">Save RTB Content</Button>
    <Button Click="LoadRTBContent">Load RTB Content</Button>
    <Button Click="PrintRTBContent">Print RTB Content</Button>
  </StackPanel>

</Page>

Im Folgenden sehen Sie den Code für das Beispiel.Below is the code behind for the example.

using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;

namespace SDKSample
{

    public partial class SaveLoadPrintRTB : Page
    {

        // Handle "Save RichTextBox Content" button click.
        void SaveRTBContent(Object sender, RoutedEventArgs args)
        {

            // Send an arbitrary URL and file name string specifying
            // the location to save the XAML in.
            SaveXamlPackage("C:\\test.xaml");
        }

        // Handle "Load RichTextBox Content" button click.
        void LoadRTBContent(Object sender, RoutedEventArgs args)
        {
            // Send URL string specifying what file to retrieve XAML
            // from to load into the RichTextBox.
            LoadXamlPackage("C:\\test.xaml");
        }

        // Handle "Print RichTextBox Content" button click.
        void PrintRTBContent(Object sender, RoutedEventArgs args)
        {
            PrintCommand();
        }

        // Save XAML in RichTextBox to a file specified by _fileName
        void SaveXamlPackage(string _fileName)
        {
            TextRange range;
            FileStream fStream;
            range = new TextRange(richTB.Document.ContentStart, richTB.Document.ContentEnd);
            fStream = new FileStream(_fileName, FileMode.Create);
            range.Save(fStream, DataFormats.XamlPackage);
            fStream.Close();
        }

        // Load XAML into RichTextBox from a file specified by _fileName
        void LoadXamlPackage(string _fileName)
        {
            TextRange range;
            FileStream fStream;
            if (File.Exists(_fileName))
            {
                range = new TextRange(richTB.Document.ContentStart, richTB.Document.ContentEnd);
                fStream = new FileStream(_fileName, FileMode.OpenOrCreate);
                range.Load(fStream, DataFormats.XamlPackage);
                fStream.Close();
            }
        }

        // Print RichTextBox content
        private void PrintCommand()
        {
            PrintDialog pd = new PrintDialog();
            if ((pd.ShowDialog() == true))
            {
                //use either one of the below
                pd.PrintVisual(richTB as Visual, "printing as visual");
                pd.PrintDocument((((IDocumentPaginatorSource)richTB.Document).DocumentPaginator), "printing as paginator");
            }
        }
    }
}

Imports System.IO
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Documents
Imports System.Windows.Media

Namespace SDKSample

    Partial Public Class SaveLoadPrintRTB
        Inherits Page

        ' Handle "Save RichTextBox Content" button click.
        Private Sub SaveRTBContent(ByVal sender As Object, ByVal args As RoutedEventArgs)

            ' Send an arbitrary URL and file name string specifying
            ' the location to save the XAML in.
            SaveXamlPackage("C:\test.xaml")
        End Sub

        ' Handle "Load RichTextBox Content" button click.
        Private Sub LoadRTBContent(ByVal sender As Object, ByVal args As RoutedEventArgs)
            ' Send URL string specifying what file to retrieve XAML
            ' from to load into the RichTextBox.
            LoadXamlPackage("C:\test.xaml")
        End Sub

        ' Handle "Print RichTextBox Content" button click.
        Private Sub PrintRTBContent(ByVal sender As Object, ByVal args As RoutedEventArgs)
            PrintCommand()
        End Sub

        ' Save XAML in RichTextBox to a file specified by _fileName
        Private Sub SaveXamlPackage(ByVal _fileName As String)
            Dim range As TextRange
            Dim fStream As FileStream
            range = New TextRange(richTB.Document.ContentStart, richTB.Document.ContentEnd)
            fStream = New FileStream(_fileName, FileMode.Create)
            range.Save(fStream, DataFormats.XamlPackage)
            fStream.Close()
        End Sub

        ' Load XAML into RichTextBox from a file specified by _fileName
        Private Sub LoadXamlPackage(ByVal _fileName As String)
            Dim range As TextRange
            Dim fStream As FileStream
            If File.Exists(_fileName) Then
                range = New TextRange(richTB.Document.ContentStart, richTB.Document.ContentEnd)
                fStream = New FileStream(_fileName, FileMode.OpenOrCreate)
                range.Load(fStream, DataFormats.XamlPackage)
                fStream.Close()
            End If
        End Sub

        ' Print RichTextBox content
        Private Sub PrintCommand()
            Dim pd As New PrintDialog()
            If (pd.ShowDialog() = True) Then
                'use either one of the below      
                pd.PrintVisual(TryCast(richTB, Visual), "printing as visual")
                pd.PrintDocument(((CType(richTB.Document, IDocumentPaginatorSource)).DocumentPaginator), "printing as paginator")
            End If
        End Sub
    End Class
End Namespace

Weitere InformationenSee also