Gewusst wie: Ersetzen des Standardinhaltshosts für ein RichTextBox

Aktualisiert: November 2007

In diesem Beispiel wird veranschaulicht, wie mithilfe von Windows Presentation Foundation (WPF)-Formatvorlagen der Standardinhaltshost für ein RichTextBox ersetzt wird.

Der Inhaltshost ist das Element, das den Inhalt von RichTextBox rendert. Die standardmäßige Steuerelementvorlage für ein RichTextBox gibt ScrollViewer als Inhaltshost an.

Wenn die Bildlauffeatures von ScrollViewer unerwünscht oder unnötig sind, kann ein einfacheres AdornerDecorator-Element als Inhaltshost für RichTextBox angegeben werden. ScrollViewer und AdornerDecorator sind die einzigen unterstützten Elemente für den Inhaltshost.

Ein Arbeitsbeispiel, in dem dies veranschaulicht wird, finden Sie unter Beispiel zum Ersetzen des Standardinhaltshosts für eine RichTextBox.

Beispiel

Die ControlTemplate für ein RichTextBox muss genau ein Element enthalten, das als Inhaltshostelement markiert ist. Weisen Sie dem Element den speziellen Namen PART_ContentHost zu, um es als Inhaltshost zu markieren. Bei dem Inhaltshostelement muss es sich um einen ScrollViewer oder um einen AdornerDecorator handeln. Vom Inhaltshostelement werden möglicherweise keine untergeordneten Elemente gehostet.

Im folgenden Extensible Application Markup Language (XAML)-Beispiel wird eine Formatvorlage definiert, die die standardmäßige Steuerelementvorlage für ein RichTextBox außer Kraft setzt. Diese Formatvorlage ist kompatibel mit Elementen, die von TextBoxBase abstammen. In dem Beispiel wird AdornerDecorator als Inhaltshost angegeben.

<Window.Resources>
  <Style x:Key="TextBoxNoScrollViewer" TargetType="{x:Type TextBoxBase}">
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type TextBoxBase}">
          <Border 
            CornerRadius="2" 
            Background="{TemplateBinding Background}" 
            BorderThickness="{TemplateBinding BorderThickness}" 
            BorderBrush="{TemplateBinding BorderBrush}"  
          >
            <!-- 
            The control template for a TextBox or RichTextBox must
            include an element tagged as the content host.  An element is 
            tagged as the content host element when it has the special name
            PART_ContentHost.  The content host element must be a ScrollViewer,
            or an element that derives from Decorator.  
            -->
            <AdornerDecorator 
              x:Name="PART_ContentHost"
              Focusable="False" 
            />
          </Border>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
</Window.Resources>

Im folgenden XAML-Beispiel wird ein RichTextBox definiert, in dem die zuvor deklarierte Formatvorlage eingesetzt wird, indem das Style-Attribut mit einem statischen Ressourcenverweis auf das x:Key-Attribut gekoppelt wird.

<RichTextBox
  Grid.Column="0"

  VerticalScrollBarVisibility="Auto"
  HorizontalScrollBarVisibility="Auto"

  Style="{StaticResource TextBoxNoScrollViewer}"      
>
  <FlowDocument>
    <Paragraph>
      RichTextBox styled not to use a ScrollViewer as the content host.
    </Paragraph>
  </FlowDocument>
</RichTextBox>

Siehe auch

Konzepte

Übersicht über RichTextBox

Übersicht über TextBox

Erstellen von Formaten und Vorlagen