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


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

См. также

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

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

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

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