Compartir a través de


Cómo: Reemplazar el host de contenido predeterminado en un control RichTextBox

Actualización: noviembre 2007

En este ejemplo se muestra cómo utilizar los estilos de Windows Presentation Foundation (WPF) para reemplazar el host de contenido predeterminado de un objeto RichTextBox.

El host del contenido es el elemento que representa el contenido de un control RichTextBox. La plantilla de control predeterminada de RichTextBox especifica un objeto ScrollViewer como host de contenido.

En los casos donde las características de desplazamiento proporcionadas por ScrollViewer no se desean o son innecesarias, se puede especificar un elemento AdornerDecorator más ligero como host de contenido para RichTextBox. ScrollViewer y AdornerDecorator son los únicos elementos compatibles con el host de contenido.

Para obtener un ejemplo de trabajo que incluye éste, vea Ejemplo Replace the Default Content Host for a RichTextBox.

Ejemplo

La plantilla de control ControlTemplate para el control RichTextBox debe contener exactamente un elemento etiquetado como elemento de host de contenido. Para etiquetar un elemento como host de contenido, asígnele el nombre especial PART_ContentHost. El elemento que hospeda el contenido debe ser un ScrollViewer o AdornerDecorator. Dicho elemento no puede hospedar elementos secundarios.

En el ejemplo de Lenguaje de marcado de aplicaciones extensible (XAML) siguiente se define un estilo que invalida la plantilla de control predeterminada de RichTextBox. Este estilo es compatible con los elementos que descienden de TextBoxBase. En el ejemplo, se especifica un objeto AdornerDecorator como host de contenido.

<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>

En el ejemplo de XAML siguiente se define un control RichTextBox que utiliza el estilo declarado previamente utilizando el atributo Style combinado con una referencia de recurso estática al x:Key (atributo) del estilo.

<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>

Vea también

Conceptos

Información general sobre el control RichTextBox

Información general sobre TextBox

Aplicar estilos y plantillas