Condividi tramite


Procedura: sostituire l'host di contenuto predefinito per un oggetto TextBox

Aggiornamento: novembre 2007

In questo esempio viene mostrato come utilizzare gli stili di Windows Presentation Foundation (WPF) per sostituire l'host di contenuto predefinito per un oggetto TextBox.

L'host di contenuto è l'elemento che esegue il rendering del contenuto dell'oggetto TextBox. Il modello di controllo predefinito per un oggetto TextBox specifica un oggetto ScrollViewer come host di contenuto. Per un esempio del modello di controllo predefinito per un oggetto TextBox, vedere Esempio di ControlTemplate del controllo TextBox.

Nei casi in cui le funzionalità di scorrimento fornite da un oggetto ScrollViewer non siano desiderate o necessarie, è possibile specificare un elemento AdornerDecorator più semplice come l'host di contenuto per un oggetto TextBox.

Per un esempio pratico, vedere Esempio di sostituzione dell'host di contenuto predefinito per un oggetto TextBox.

Esempio

Nell'oggetto ControlTemplate per un oggetto TextBox deve essere contenuto esattamente un elemento contrassegnato come elemento host di contenuto. Per contrassegnare un elemento come host di contenuto, assegnargli il nome speciale PART_ContentHost. L'elemento host di contenuto deve essere un oggetto ScrollViewer o un oggetto AdornerDecorator. È possibile che l'elemento host di contenuto non ospiti elementi figlio.

Nell'esempio Extensible Application Markup Language (XAML) seguente viene definito uno stile che esegue l'override del modello di controllo predefinito per un oggetto TextBox. Questo stile è compatibile con gli elementi che derivano da TextBoxBase. Nell'esempio, un oggetto AdornerDecorator viene specificato come host di contenuto.

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

Nell'esempio XAML seguente viene definito un oggetto TextBox che utilizza lo stile dichiarato in precedenza tramite l'attributo Style e un riferimento di risorsa statica all'attributo Attributo x:Key dello stile.

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

Vedere anche

Concetti

Cenni preliminari sulla classe TextBox

Cenni generali sul controllo RichTextBox

Applicazione di stili e modelli