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