ControlTemplate Classe

Definizione

Specifica la struttura visiva e gli aspetti di comportamento di un controllo Control che può essere condiviso tra più istanze del controllo.

public ref class ControlTemplate : System::Windows::FrameworkTemplate
[System.Windows.Localizability(System.Windows.LocalizationCategory.None, Readability=System.Windows.Readability.Unreadable)]
[System.Windows.Markup.DictionaryKeyProperty("TargetType")]
public class ControlTemplate : System.Windows.FrameworkTemplate
[<System.Windows.Localizability(System.Windows.LocalizationCategory.None, Readability=System.Windows.Readability.Unreadable)>]
[<System.Windows.Markup.DictionaryKeyProperty("TargetType")>]
type ControlTemplate = class
    inherit FrameworkTemplate
Public Class ControlTemplate
Inherits FrameworkTemplate
Ereditarietà
Attributi

Esempio

Di seguito viene illustrato un Button Style oggetto che imposta l'oggetto ControlTemplate di un Buttonoggetto :

<Style TargetType="Button">
  <!--Set to true to not get any properties from the themes.-->
  <Setter Property="OverridesDefaultStyle" Value="True"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Grid>
          <Ellipse Fill="{TemplateBinding Background}"/>
          <ContentPresenter HorizontalAlignment="Center"
                            VerticalAlignment="Center"/>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

Quando questa operazione viene applicata, l'oggetto Button viene visualizzato come Ellipse:

Esempio di ControlTemplate del pulsante

Quando si imposta la Template proprietà di un Control oggetto su un nuovo ControlTemplate come nell'esempio precedente, si sostituisce l'intero modello. Button Ciò che sembra quando si trova nello stato attivo o premuto fa parte dell'aspetto predefinito del pulsante che si sta sostituendo. Pertanto, a seconda delle esigenze, è possibile inserire nella definizione il pulsante che dovrebbe essere simile quando viene premuto e così via, come nell'esempio seguente:

<Style TargetType="Button">
  <Setter Property="SnapsToDevicePixels"
          Value="true" />
  <Setter Property="OverridesDefaultStyle"
          Value="true" />
  <Setter Property="FocusVisualStyle"
          Value="{StaticResource ButtonFocusVisual}" />
  <Setter Property="MinHeight"
          Value="23" />
  <Setter Property="MinWidth"
          Value="75" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Border TextBlock.Foreground="{TemplateBinding Foreground}"
                x:Name="Border"
                CornerRadius="2"
                BorderThickness="1">
          <Border.BorderBrush>
            <LinearGradientBrush StartPoint="0,0"
                                 EndPoint="0,1">
              <LinearGradientBrush.GradientStops>
                <GradientStopCollection>
                  <GradientStop Color="{DynamicResource BorderLightColor}"
                                Offset="0.0" />
                  <GradientStop Color="{DynamicResource BorderDarkColor}"
                                Offset="1.0" />
                </GradientStopCollection>
              </LinearGradientBrush.GradientStops>
            </LinearGradientBrush>

          </Border.BorderBrush>
          <Border.Background>
            <LinearGradientBrush EndPoint="0.5,1"
                                 StartPoint="0.5,0">
              <GradientStop Color="{DynamicResource ControlLightColor}"
                            Offset="0" />
              <GradientStop Color="{DynamicResource ControlMediumColor}"
                            Offset="1" />
            </LinearGradientBrush>
          </Border.Background>
          <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CommonStates">
              <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0:0:0.5" />
                <VisualTransition GeneratedDuration="0"
                                  To="Pressed" />
              </VisualStateGroup.Transitions>
              <VisualState x:Name="Normal" />
              <VisualState x:Name="MouseOver">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource ControlMouseOverColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
              <VisualState x:Name="Pressed">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource ControlPressedColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
                      (GradientBrush.GradientStops)[0].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource PressedBorderDarkColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource PressedBorderLightColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
              <VisualState x:Name="Disabled">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource DisabledControlDarkColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames
                      Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource DisabledForegroundColor}" />
                  </ColorAnimationUsingKeyFrames>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
                      (GradientBrush.GradientStops)[1].(GradientStop.Color)"
                                                Storyboard.TargetName="Border">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource DisabledBorderDarkColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
          <ContentPresenter Margin="2"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            RecognizesAccessKey="True" />
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsDefault"
                   Value="true">

            <Setter TargetName="Border"
                    Property="BorderBrush">
              <Setter.Value>
                <LinearGradientBrush StartPoint="0,0"
                                     EndPoint="0,1">
                  <GradientBrush.GradientStops>
                    <GradientStopCollection>
                      <GradientStop Color="{DynamicResource DefaultBorderBrushLightBrush}"
                                    Offset="0.0" />
                      <GradientStop Color="{DynamicResource DefaultBorderBrushDarkColor}"
                                    Offset="1.0" />
                    </GradientStopCollection>
                  </GradientBrush.GradientStops>
                </LinearGradientBrush>

              </Setter.Value>
            </Setter>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

Si noti che questo esempio fa riferimento alle risorse non visualizzate qui. Per l'esempio completo, vedere Esempio di applicazione di stili con ControlTemplates. Questo esempio fornisce esempi di modelli di controllo per molti controlli ed è il modo migliore per iniziare a creare modelli di controllo.

Commenti

Consente ControlTemplate di specificare la struttura visiva di un controllo. L'autore del controllo può definire l'impostazione predefinita ControlTemplate e l'autore dell'applicazione può eseguire l'override ControlTemplate per ricostruire la struttura visiva del controllo.

La creazione di modelli di controllo è una delle numerose funzionalità offerte dallo stile e dal modello di templating WPF. Lo stile e il modello di templating offrono una grande flessibilità che in molti casi non è necessario scrivere i propri controlli. Se si è un autore dell'applicazione che vuole modificare la visualizzazione del controllo o sostituire l'oggetto di un controllo esistente, vedere l'argomento ControlTemplate Stile e Templating per esempi e una discussione approfondita.

Se si scrive il proprio controllo, vedere "Crea un controllo personalizzato" nella panoramica della creazione del controllo.

Un ControlTemplate oggetto è destinato a essere un'unità autonoma di dettaglio dell'implementazione che è invisibile agli utenti e agli oggetti esterni, inclusi gli stili. L'unico modo per modificare il contenuto del modello di controllo è dall'interno dello stesso modello di controllo.

Utilizzo della sintassi XAML per elementi proprietà

<ControlTemplate>  
  <VisualTreeRootNode>
    VisualTreeNodeContents  
  </VisualTreeRootNode>  
</ControlTemplate>  

Valori XAML

ControlTemplate
Elemento Object per ControlTemplate o una classe derivata.

VisualTreeRootNode
Un singolo elemento XAML come figlio immediato della ControlTemplate classe (o di una classe derivata). I modelli devono avere un singolo nodo radice. Per generare un modello utile, l'elemento scelto come VisualTreeRootNode deve supportare un modello di contenuto personalizzato, spesso un modello che supporta più elementi figlio.

VisualTreeNodeContents
Uno o più elementi che completano il modello previsto. Se l'elemento scelto come VisualTreeRootNode supporta solo un singolo elemento figlio, è possibile dichiarare un solo elemento come VisualTreeNodeContents. È anche possibile (anche se non comune) fornire contenuto di testo se l'oggetto VisualTreeRootNode scelto supporta una proprietà contenuto di testo.

Costruttori

ControlTemplate()

Inizializza una nuova istanza della classe ControlTemplate.

ControlTemplate(Type)

Inizializza una nuova istanza della classe ControlTemplate con il tipo di destinazione specificato.

Proprietà

Dispatcher

Ottiene l'oggetto Dispatcher associato a DispatcherObject.

(Ereditato da DispatcherObject)
HasContent

Ottiene un valore che indica se il contenuto di questo modello è stato ottimizzato.

(Ereditato da FrameworkTemplate)
IsSealed

Ottiene un valore che indica se questo oggetto è in uno stato immutabile e pertanto non può essere modificato.

(Ereditato da FrameworkTemplate)
Resources

Ottiene o imposta l'insieme di risorse che possono essere utilizzate all'interno dell'ambito di questo modello.

(Ereditato da FrameworkTemplate)
TargetType

Ottiene o imposta il tipo per cui l'oggetto ControlTemplate è destinato.

Template

Ottiene o imposta un riferimento all'oggetto che registra o riproduce i nodi XAML per il modello quando il modello è definito o è applicato da un writer.

(Ereditato da FrameworkTemplate)
Triggers

Ottiene un insieme di oggetti TriggerBase che applicano modifiche della proprietà o eseguono azioni in base a condizioni specificate.

VisualTree

Ottiene o imposta il nodo radice del modello.

(Ereditato da FrameworkTemplate)

Metodi

CheckAccess()

Determina se il thread chiamante ha accesso a DispatcherObject.

(Ereditato da DispatcherObject)
Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
FindName(String, FrameworkElement)

Trova l'elemento associato al nome specificato definito all'interno del modello.

(Ereditato da FrameworkTemplate)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
LoadContent()

Carica il contenuto del modello come istanza di un oggetto e restituisce l'elemento radice del contenuto.

(Ereditato da FrameworkTemplate)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
RegisterName(String, Object)

Registra una nuova coppia nome/oggetto nel namescope corrente.

(Ereditato da FrameworkTemplate)
Seal()

Blocca il modello affinché non possa essere modificato.

(Ereditato da FrameworkTemplate)
ShouldSerializeResources(XamlDesignerSerializationManager)

Restituisce un valore che indica se i processi di serializzazione devono serializzare il valore della proprietà Resources sulle istanze di questa classe.

(Ereditato da FrameworkTemplate)
ShouldSerializeVisualTree()

Restituisce un valore che indica se i processi di serializzazione devono serializzare il valore della proprietà VisualTree sulle istanze di questa classe.

(Ereditato da FrameworkTemplate)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)
UnregisterName(String)

Rimuove un mapping nome/oggetto dal NameScope XAML.

(Ereditato da FrameworkTemplate)
ValidateTemplatedParent(FrameworkElement)

Controlla il padre basato su modelli rispetto a un insieme di regole.

VerifyAccess()

Impone che il thread chiamante abbia accesso a DispatcherObject.

(Ereditato da DispatcherObject)

Implementazioni dell'interfaccia esplicita

INameScope.FindName(String)

Restituisce un oggetto con il nome identificativo specificato.

(Ereditato da FrameworkTemplate)
IQueryAmbient.IsAmbientPropertyAvailable(String)

Esegue una query per determinare se una proprietà di ambiente specificata è disponibile nell'ambito corrente.

(Ereditato da FrameworkTemplate)

Si applica a

Vedi anche