Vue d'ensemble de RichTextBoxRichTextBox Overview

Le RichTextBox contrôle vous permet d’afficher ou de modifier du contenu de fluide, y compris des paragraphes, des images, des tableaux, etc.The RichTextBox control enables you to display or edit flow content including paragraphs, images, tables, and more. Cette rubrique présente la TextBox classe et fournit des exemples d’utilisation de celle-ci langage XAML (eXtensible Application Markup Language)Extensible Application Markup Language (XAML) dans C#et.This topic introduces the TextBox class and provides examples of how to use it in both langage XAML (eXtensible Application Markup Language)Extensible Application Markup Language (XAML) and C#.

TextBox ou RichTextBox ?TextBox or RichTextBox?

RichTextBox EtTextBox permettent aux utilisateurs de modifier du texte, mais les deux contrôles sont utilisés dans différents scénarios.Both RichTextBox and TextBox allow users to edit text, however, the two controls are used in different scenarios. Un RichTextBox est un meilleur choix lorsqu’il est nécessaire que l’utilisateur modifie du texte mis en forme, des images, des tableaux ou d’autres contenus enrichis.A RichTextBox is a better choice when it is necessary for the user to edit formatted text, images, tables, or other rich content. Par exemple, la modification d’un document, d’un article ou d’un blog nécessitant une mise en forme, des RichTextBoximages, etc. est mieux accomplie à l’aide d’un.For example, editing a document, article, or blog that requires formatting, images, etc is best accomplished using a RichTextBox. Un TextBox requiert moins de RichTextBox ressources système, et est idéal lorsque seul du texte brut doit être modifié (par exemple, utilisation dans des formulaires).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). Pour plus d’informations sur TextBox, consultez vue d’ensemble des zones de texte .See TextBox Overview for more information on TextBox. Le tableau ci-dessous résume les principales fonctionnalités TextBox de RichTextBoxet.The table below summarizes the main features of TextBox and RichTextBox.

ContrôleControl Vérification de l’orthographe en temps réelReal-time Spellchecking Menu contextuelContext Menu Mise en forme des ToggleBold commandes telles que (CTR + B)Formatting commands like ToggleBold (Ctr+B) FlowDocumentcontenu tel que des images, des paragraphes, des tableaux, etc.FlowDocument content like images, paragraphs, tables, etc.
TextBox OuiYes OuiYes NonNo Non.No.
RichTextBox OuiYes OUIYes OUIYes OuiYes

Notes

Bien TextBox que ne prenne pas en charge les ToggleBold commandes associées à la mise en forme telles que (CTR + B), de MoveToLineEndnombreuses commandes de base sont prises en charge par les deux contrôles, tels que.Although TextBox does not support formatting related commands like ToggleBold (Ctr+B), many basic commands are supported by both controls such as MoveToLineEnd.

Les fonctionnalités du tableau ci-dessus sont présentées plus en détail dans la suite de ce document.The features from the table above are covered in more detail later.

Création d’un contrôle RichTextBoxCreating a RichTextBox

Le code ci-dessous montre comment créer RichTextBox un qu’un utilisateur peut modifier du contenu riche.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>

Plus précisément, le contenu modifié dans RichTextBox a est le contenu dynamique.Specifically, the content edited in a RichTextBox is flow content. Le contenu dynamique peut contenir de nombreux types d’éléments, notamment du texte mis en forme, des images, des listes et des tableaux.Flow content can contain many types of elements including formatted text, images, lists, and tables. Pour obtenir des informations complètes sur les documents dynamiques, consultez Vue d’ensemble des documents dynamiques.See Flow Document Overview for in depth information on flow documents. Pour pouvoir contenir du contenu dynamique, un RichTextBox héberge un FlowDocument objet qui, à son tour, contient le contenu modifiable.In order to contain flow content, a RichTextBox hosts a FlowDocument object which in turn contains the editable content. Pour illustrer le contenu dynamique RichTextBoxd’un, le code suivant montre comment créer RichTextBox un avec un paragraphe et du texte en gras.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

L’illustration suivante montre le rendu de cet exemple.The following illustration shows how this sample renders.

Contrôle RichTextBox avec du contenuRichTextBox with content

Les éléments Paragraph tels Bold que et déterminent la façon RichTextBox dont le contenu à l’intérieur d’un s’affiche.Elements like Paragraph and Bold determine how the content inside a RichTextBox appears. Lorsqu’un utilisateur modifie RichTextBox le contenu, il modifie ce contenu de fluide.As a user edits RichTextBox content, they change this flow content. Pour en savoir plus sur les fonctionnalités et l’utilisation du contenu dynamique, consultez Vue d’ensemble des documents dynamiques.To learn more about the features of flow content and how to work with it, see Flow Document Overview.

Notes

Le contenu dynamique à RichTextBox l’intérieur d’un ne se comporte pas exactement comme le contenu de Flow contenu dans d’autres contrôles.Flow content inside a RichTextBox does not behave exactly like flow content contained in other controls. Par exemple, il n’y a pas de RichTextBox colonnes dans un et, par conséquent, aucun comportement de redimensionnement automatique.For example, there are no columns in a RichTextBox and hence no automatic resizing behavior. En outre, les fonctionnalités intégrées telles que la recherche, le mode d’affichage, la navigation entre les pages RichTextBoxet le zoom ne sont pas disponibles dans un.Also, built in features like search, viewing mode, page navigation, and zoom are not available within a RichTextBox.

Vérification de l’orthographe en temps réelReal-time Spell Checking

Vous pouvez activer la vérification de l’orthographe en temps TextBox réel RichTextBoxdans un ou un.You can enable real-time spell checking in a TextBox or RichTextBox. Lorsque la vérification de l’orthographe est activée, une ligne rouge apparaît sous les mots mal orthographiés (voir l’illustration ci-dessous).When spellchecking is turned on, a red line appears underneath any misspelled words (see picture below).

Contrôle TextBox avec vérification de l’orthographeTextbox with spell-checking

Pour savoir comment activer la vérification de l’orthographe, consultez Activer la vérification de l’orthographe dans un contrôle d’édition de texte.See Enable Spell Checking in a Text Editing Control to learn how to enable spellchecking.

Menu contextuelContext Menu

Par défaut, TextBox et RichTextBox ont un menu contextuel qui s’affiche quand un utilisateur clique avec le bouton droit dans le contrôle.By default, both TextBox and RichTextBox have a context menu that appears when a user right-clicks inside the control. Ce menu contextuel permet à l’utilisateur de couper, de copier ou de coller du texte (voir l’illustration ci-dessous).The context menu allows the user to cut, copy, or paste (see illustration below).

Contrôle TextBox avec un menu contextuelTextBox with context menu

Vous pouvez créer votre propre menu contextuel personnalisé pour remplacer celui par défaut.You can create your own custom context menu to override the default one. Pour plus d’informations, consultez Positionner un menu contextuel personnalisé dans un RichTextBox.See Position a Custom Context Menu in a RichTextBox for more information.

Commandes d’éditionEditing Commands

Les commandes d’édition permettent aux utilisateurs de mettre en RichTextBoxforme le contenu modifiable à l’intérieur d’un.Editing commands enable users to format editable content inside a RichTextBox. Outre les commandes d’édition RichTextBox de base, comprend des TextBox commandes de mise en forme qui ne prennent pas en charge.Besides basic editing commands, RichTextBox includes formatting commands that TextBox does not support. Par exemple, lors de la modification RichTextBoxd’un, un utilisateur peut appuyer sur Ctr + B pour activer ou désactiver la mise en forme du texte en gras.For example, when editing in a RichTextBox, a user could press Ctr+B to toggle bold text formatting. Pour EditingCommands obtenir la liste complète des commandes disponibles, consultez.See EditingCommands for a complete list of commands available. Outre l’utilisation des raccourcis clavier, vous pouvez associer des commandes à d’autres contrôles, notamment des boutons.In addition to using keyboard shortcuts, you can hook commands up to other controls like buttons. L’exemple suivant montre comment créer une barre d’outils simple contenant des boutons que l’utilisateur peut utiliser pour modifier la mise en forme du texte.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>

L’illustration suivante montre comment cet exemple s’affiche.The following illustration shows how this sample displays.

Contrôle RichTextBox avec une barre d’outilsRichTextBox with ToolBar

Détecter la modification du contenuDetect when Content Changes

En règle TextChanged générale, l’événement doit être utilisé pour détecter chaque fois TextBox que RichTextBox le texte d’un ou change, comme vous pouvez vous y attendre. KeyDownUsually the TextChanged event should be used to detect whenever the text in a TextBox or RichTextBox changes rather then KeyDown as you might expect. Pour obtenir un exemple, consultez Détecter la modification du texte figurant dans un TextBox.See Detect When Text in a TextBox Has Changed for an example.

Enregistrer, charger et imprimer le contenu d'un RichTextBoxSave, Load, and Print RichTextBox Content

L’exemple suivant montre comment enregistrer le contenu d’un RichTextBox dans un fichier, charger à nouveau ce contenu dans RichTextBoxle et imprimer le contenu.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. Voici le balisage de l’exemple.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>

Voici le code-behind de l’exemple.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

Voir aussiSee also