Gewusst wie: Ersetzen des Standardinhaltshosts für eine "TextBox"

Aktualisiert: November 2007

Dieses Beispiel zeigt, wie Sie mithilfe von Windows Presentation Foundation (WPF)-Stilen den Standardinhaltshost für ein TextBox ersetzen.

Der Inhaltshost ist das Element, das den Inhalt von TextBox rendert. Die standardmäßige Steuerelementvorlage für ein TextBox-Element gibt ScrollViewer als Inhaltshost an. Ein Beispiel für die standardmäßige Steuerelementvorlage für ein TextBox-Element finden Sie unter Beispiel für ein TextBox-ControlTemplate.

Wenn die Bildlauffeatures von ScrollViewer unerwünscht oder unnötig sind, kann ein einfacheres AdornerDecorator-Element als Inhaltshost für TextBox angegeben werden.

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

Beispiel

Die ControlTemplate für ein TextBox 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 ein Stil definiert, der die standardmäßige Steuerelementvorlage für ein TextBox-Element überschreibt. Dieser Stil 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 TextBox-Element definiert, in dem der zuvor deklarierte Stil verwendet wird, indem das Style-Attribut mit einem statischen Ressourcenverweis auf das x:Key-Attribut gekoppelt wird

<TextBox
  Grid.Column="0"

  AcceptsReturn="True"
  AcceptsTab="True"
  TextWrapping="Wrap" 

  VerticalScrollBarVisibility="Auto"
  HorizontalScrollBarVisibility="Auto"

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

Siehe auch

Konzepte

Übersicht über TextBox

Übersicht über RichTextBox

Erstellen von Formaten und Vorlagen