Практическое руководство. Замена стандартного узла содержимого для элемента RichTextBox
Обновлен: Ноябрь 2007
В этом примере показано использование стилей Windows Presentation Foundation (WPF) для замены стандартного узла содержимого для элемента управления RichTextBox.
Узел содержимого — это элемент, отображающий содержимое RichTextBox. Стандартный шаблон элемента управления RichTextBox задает элемент ScrollViewer в качестве узла содержимого.
В случаях, когда возможности прокрутки, предоставляемые ScrollViewer, являются нежелательными или ненужными, облегченный элемент AdornerDecorator может быть определен в качестве узла содержимого элемента управления RichTextBox. ScrollViewer и AdornerDecorator являются поддерживаемыми элементами узла содержимого.
Работающий пример, демонстрируемый в этом примере, см. в разделе Пример замены узла содержимого по умолчанию для RichTextBox.
Пример
Шаблон ControlTemplate элемента RichTextBox должен содержать только один элемент, обозначенный как элемент узла содержимого. Для обозначения элемента в качестве узла содержимого, назначьте ему специальное имя PART_ContentHost. Элемент узла содержимого должен быть либо ScrollViewer, либо AdornerDecorator. Элемент узла содержимого не может содержать ни одного дочернего элемента.
В следующем примере кода Язык XAML (Extensible Application Markup Language) определяется стиль, который переопределяет стандартный шаблон элемента управления для RichTextBox. Этот стиль обеспечивает совместимость с элементами, полученными из класса TextBoxBase. В этом примере элемент AdornerDecorator указывается в качестве узла содержимого.
<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>
В следующем примере кода XAML определяется элемент управления RichTextBox, который использует ранее объявленный стиль с помощью атрибута Style вместе со статической ресурсной ссылкой на атрибут Атрибут x:Key стиля.
<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>