ControlTemplate Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Specifica la struttura visiva e gli aspetti comportamentali di un Control che possono essere condivisi 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 ButtonStyle che imposta il ControlTemplate di un 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>
Quando questo viene applicato, il Button viene visualizzato come Ellipse:
esempio di
Quando si imposta la proprietà Template di un Control su un nuovo ControlTemplate come nell'esempio precedente, si sostituisce l'intero modello. L'aspetto del Button quando è attivo o premuto fa parte dell'aspetto predefinito del pulsante che si sta sostituendo. Pertanto, a seconda delle esigenze, è possibile inserire nella definizione l'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 non visualizzate qui. Per l'esempio completo, vedere Applicazione di stili con ControlTemplates Sample. Questo esempio fornisce esempi di modelli di controllo per molti controlli ed è il modo migliore per iniziare a creare modelli di controllo.
Commenti
Il ControlTemplate consente di specificare la struttura visiva di un controllo. L'autore del controllo può definire il ControlTemplate predefinito e l'autore dell'applicazione può eseguire l'override del ControlTemplate per ricostruire la struttura visiva del controllo.
La creazione di modelli di controllo è una delle numerose funzionalità offerte dal modello di applicazione di modelli e stili WPF. Il modello di applicazione di stili e modelli offre una grande flessibilità che in molti casi non è necessario scrivere controlli personalizzati. Se si è un autore dell'applicazione che vuole modificare la visualizzazione del controllo o sostituire il ControlTemplate di un controllo esistente, vedere l'argomento Applicazione di stili e modelli per esempi e una discussione approfondita.
Se si sta scrivendo un controllo personalizzato, vedere "Create a Custom Control" (Creare un controllo personalizzato) nella Cenni preliminari sulla creazione di controlli.
Un ControlTemplate deve essere un'unità autonoma di dettaglio dell'implementazione 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 dell'elemento della proprietà XAML
<ControlTemplate>
<VisualTreeRootNode>
VisualTreeNodeContents
</VisualTreeRootNode>
</ControlTemplate>
Valori XAML
elemento ControlTemplate Object per ControlTemplate o una classe derivata.
VisualTreeRootNode Un singolo elemento XAML come elemento figlio immediato del ControlTemplate (o una classe derivata). I modelli devono avere un singolo nodo radice. Per generare un modello utile, si prevede che l'elemento scelto come VisualTreeRootNode supporti un modello di contenuto autonomo, 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 il scelto visualTreeRootNode supporta una proprietà del 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 il Dispatcher a cui è associato questo DispatcherObject. (Ereditato da DispatcherObject) |
HasContent |
Ottiene un valore che indica se questo modello ha contenuto ottimizzato. (Ereditato da FrameworkTemplate) |
IsSealed |
Ottiene un valore che indica se l'oggetto è in uno stato non modificabile in modo che non possa essere modificato. (Ereditato da FrameworkTemplate) |
Resources |
Ottiene o imposta la raccolta di risorse che possono essere utilizzate nell'ambito di questo modello. (Ereditato da FrameworkTemplate) |
TargetType |
Ottiene o imposta il tipo per il quale è previsto questo ControlTemplate. |
Template |
Ottiene o imposta un riferimento all'oggetto che registra o riproduce i nodi XAML per il modello quando il modello viene definito o applicato da un writer. (Ereditato da FrameworkTemplate) |
Triggers |
Ottiene un insieme di oggetti TriggerBase che applicano modifiche alle proprietà o eseguono azioni in base alle condizioni specificate. |
VisualTree |
Ottiene o imposta il nodo radice del modello. (Ereditato da FrameworkTemplate) |
Metodi
CheckAccess() |
Determina se il thread chiamante ha accesso a questo 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 di questo modello. (Ereditato da FrameworkTemplate) |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetType() |
Ottiene il 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 del Objectcorrente. (Ereditato da Object) |
RegisterName(String, Object) |
Registra una nuova coppia nome/oggetto nell'ambito del nome corrente. (Ereditato da FrameworkTemplate) |
Seal() |
Blocca il modello in modo che 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 nelle 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 nelle 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 dall'ambito dei nomi XAML. (Ereditato da FrameworkTemplate) |
ValidateTemplatedParent(FrameworkElement) |
Controlla l'elemento padre basato su modelli in base a un set di regole. |
VerifyAccess() |
Impone che il thread chiamante abbia accesso a questo DispatcherObject. (Ereditato da DispatcherObject) |
Implementazioni dell'interfaccia esplicita
INameScope.FindName(String) |
Restituisce un oggetto con il nome di identificazione specificato. (Ereditato da FrameworkTemplate) |
IQueryAmbient.IsAmbientPropertyAvailable(String) |
Esegue una query sull'eventuale disponibilità di una proprietà di ambiente specificata nell'ambito corrente. (Ereditato da FrameworkTemplate) |