Поделиться через


Практическое руководство. Замена стандартного хранилища содержимого для элемента 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>

См. также

Основные понятия

Общие сведения о TextBox

Общие сведения о RichTextBox

Стилизация и использование шаблонов