Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto manualmente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale.
Traduzione
Originale

Classe ControlTemplate

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

Spazio dei nomi:  System.Windows.Controls
Assembly:  PresentationFramework (in PresentationFramework.dll)
XMLNS per XAML: http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation

[DictionaryKeyPropertyAttribute("TargetType")]
[LocalizabilityAttribute(LocalizationCategory.None, Readability = Readability.Unreadable)]
public class ControlTemplate : FrameworkTemplate
<ControlTemplate>
  <VisualTreeRootNode>
VisualTreeNodeContents
  </VisualTreeRootNode>
</ControlTemplate>

Valor XAML

ControlTemplate

Elemento Object per ControlTemplate o una classe derivata.

VisualTreeRootNode

Un singolo elemento XAML dell'elemento figlio immediato dell'oggetto ControlTemplate (o una classe derivata). I modelli devono presentare un solo nodo radice. Per generare un modello utile, l'elemento scelto come VisualTreeRootNode deve supportare un proprio modello di contenuto, spesso un modello che supporti più elementi figlio.

VisualTreeNodeContents

Uno o più elementi che completano il modello desiderato. Se l'elemento scelto come VisualTreeRootNode supporta un unico elemento figlio, potrà esistere un solo elemento dichiarato come VisualTreeNodeContents. È anche possibile, sebbene poco frequente, fornire contenuto di testo se l'elemento VisualTreeRootNode scelto supporta una proprietà di contenuto di testo.

Il tipo ControlTemplate espone i seguenti membri.

  NomeDescrizione
Metodo pubblicoControlTemplate()Inizializza una nuova istanza della classe ControlTemplate.
Metodo pubblicoControlTemplate(Type)Inizializza una nuova istanza della classe ControlTemplate con il tipo di destinazione specificato.
In alto

  NomeDescrizione
Proprietà pubblicaDispatcher Ottiene l'oggetto Dispatcher al quale l'oggetto DispatcherObject è associato. (Ereditato da DispatcherObject)
Proprietà pubblicaHasContentOttiene un valore che indica se il contenuto di questo modello è stato ottimizzato. (Ereditato da FrameworkTemplate)
Proprietà pubblicaIsSealedOttiene un valore che indica se questo oggetto è in uno stato immutabile e pertanto non può essere modificato. (Ereditato da FrameworkTemplate)
Proprietà pubblicaResourcesOttiene o imposta l'insieme di risorse che possono essere utilizzate all'interno dell'ambito di questo modello. (Ereditato da FrameworkTemplate)
Proprietà pubblicaTargetTypeOttiene o imposta il tipo cui è destinato questo ControlTemplate.
Proprietà pubblicaTemplateOttiene 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)
Proprietà pubblicaTriggersOttiene un insieme di oggetti TriggerBase che applicano modifiche della proprietà o eseguono azioni in base a condizioni specificate.
Proprietà pubblicaVisualTreeOttiene o imposta il nodo radice del modello. (Ereditato da FrameworkTemplate)
In alto

  NomeDescrizione
Metodo pubblicoCheckAccess Determina se il thread chiamante ha accesso a questo DispatcherObject. (Ereditato da DispatcherObject)
Metodo pubblicoEquals(Object)Determina se l'oggetto Object specificato è uguale all'oggetto Object corrente. (Ereditato da Object)
Metodo protettoFinalize Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulizia prima che l'oggetto stesso venga reclamato dalla procedura di Garbage Collection. (Ereditato da Object)
Metodo pubblicoFindNameTrova l'elemento associato al nome specificato definito all'interno di questo modello. (Ereditato da FrameworkTemplate)
Metodo pubblicoGetHashCodeFunge da funzione hash per un determinato tipo. (Ereditato da Object)
Metodo pubblicoGetType Ottiene il Type dell'istanza corrente. (Ereditato da Object)
Metodo pubblicoLoadContentCarica il contenuto del modello come istanza di un oggetto e restituisce l'elemento radice del contenuto. (Ereditato da FrameworkTemplate)
Metodo protettoMemberwiseClone Crea una copia dei riferimenti dell'oggetto Object corrente. (Ereditato da Object)
Metodo pubblicoRegisterNameRegistra una nuova coppia nome/oggetto nel namescope corrente. (Ereditato da FrameworkTemplate)
Metodo pubblicoSealBlocca il modello affinché non possa essere modificato. (Ereditato da FrameworkTemplate)
Metodo pubblicoShouldSerializeResourcesRestituisce un valore che indica se i processi di serializzazione devono serializzare il valore della proprietà Resources sulle istanze di questa classe. (Ereditato da FrameworkTemplate)
Metodo pubblicoShouldSerializeVisualTreeRestituisce un valore che indica se i processi di serializzazione devono serializzare il valore della proprietà VisualTree sulle istanze di questa classe. (Ereditato da FrameworkTemplate)
Metodo pubblicoToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)
Metodo pubblicoUnregisterNameRimuove un mapping nome/oggetto dal NameScope XAML. (Ereditato da FrameworkTemplate)
Metodo protettoValidateTemplatedParentControlla il padre basato su modelli rispetto a un insieme di regole. (Esegue l'override di FrameworkTemplate.ValidateTemplatedParent(FrameworkElement)).
Metodo pubblicoVerifyAccess Impone che il thread chiamante abbia accesso a questo DispatcherObject. (Ereditato da DispatcherObject)
In alto

  NomeDescrizione
Implementazione esplicita dell'interfacciaMetodo privatoINameScope.FindNameInfrastruttura. Restituisce un oggetto che ha il nome identificativo fornito. (Ereditato da FrameworkTemplate)
Implementazione esplicita dell'interfacciaMetodo privatoIQueryAmbient.IsAmbientPropertyAvailableEsegue una query per determinare se una proprietà di ambiente specificata è disponibile nell'ambito corrente. (Ereditato da FrameworkTemplate)
In alto

ControlTemplate consente di specificare la struttura visiva di un controllo. L’autore del controllo definisce il modello predefinito ControlTemplate e l'autore dell'applicazione può eseguire l'override di ControlTemplate per ricostruire la struttura visiva del controllo.

L'applicazione di modelli ai controlli è una delle numerose funzionalità offerte dal modello stilistico WPF. Il modello stilistico fornisce una grande flessibilità che in molti casi non rende necessario scrivere i controlli. Se si è autori di un'applicazione e si desidera modificare la visualizzazione del controllo o sostituire l'oggetto ControlTemplate di un controllo esistente, vedere l'argomento Styling and Templating per esempi e una discussione dettagliata.

Se si intende creare un proprio controllo, vedere "Creazione di un controllo personalizzato" in Control Authoring Overview.

ControlTemplate deve essere un'unità indipendente di dettaglio di implementazione invisibile a utenti e oggetti esterni, inclusi gli stili. L’unico modo per modificare il contenuto del modello di controllo è dall'interno dello stesso modello di controllo.

Di seguito viene illustrato un controllo Button Style che imposta il ControlTemplate di un controllo Button:


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


Applicando questa procedura, Button appare nella forma di un oggetto Ellipse:

Esempio di ControlTemplate del pulsante

Quando si imposta la proprietà Template di un Control a un nuovo ControlTemplate come nell'esempio precedente, viene sostituito il modello intero. L'aspetto del Button quando è attivo o viene premuto fa interamente parte dell'aspetto predefinito del pulsante che si sta sostituendo. Pertanto, a seconda delle esigenze, è opportuno inserire la definizione dell'aspetto del pulsante 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 a risorse che non vengono visualizzate in questa sede. Per l'esempio completo, vedere Esempio di applicazione di stili con ControlTemplate (la pagina potrebbe essere in inglese). Nell'esempio vengono forniti esempi di modelli di controllo per diversi controlli e le informazioni introduttive alla creazione di modelli di controllo.

.NET Framework

Supportato in: 4, 3.5, 3.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 o versione successiva, Windows XP SP3, Windows Server 2008 (componenti di base del server non supportati), Windows Server 2008 R2 (componenti di base del server supportati con SP1 o versione successiva), Windows Server 2003 SP2

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2015 Microsoft