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>