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 oggetto 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 oggetto che imposta l'oggetto ControlTemplate di un oggetto 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 viene applicato, l'oggetto Button viene visualizzato come Ellipse:
pulsante Di
Quando si imposta la Template proprietà di un Control oggetto su un nuovo ControlTemplate come nell'esempio precedente, si sostituisce l'intero modello. L'aspetto Button di quando è attivo o premuto è tutto 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.For the complete sample, see Styling with 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
ControlTemplate consente di specificare la struttura visiva di un controllo . L'autore del controllo può definire il valore predefinito ControlTemplate e l'autore dell'applicazione può eseguire l'override ControlTemplate di 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 l'oggetto 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 "Creare un controllo personalizzato" in Cenni preliminari sulla creazione di controlli.
Un ControlTemplate oggetto 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
Controltemplate Elemento Object per ControlTemplate o una classe derivata.
VisualTreeRootNode Un singolo elemento XAML come elemento figlio immediato dell'oggetto ControlTemplate (o di 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 visualTreeRootNode scelto supporta una proprietà del contenuto di testo.
Costruttori
| Nome | Descrizione |
|---|---|
| ControlTemplate() |
Inizializza una nuova istanza della classe ControlTemplate. |
| ControlTemplate(Type) |
Inizializza una nuova istanza della ControlTemplate classe con il tipo di destinazione specificato. |
Proprietà
| Nome | Descrizione |
|---|---|
| Dispatcher |
Ottiene l'oggetto DispatcherDispatcherObject a cui è associato. (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 l'oggetto 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 una raccolta di TriggerBase oggetti 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
| Nome | Descrizione |
|---|---|
| CheckAccess() |
Determina se il thread chiamante ha accesso a questo DispatcherObjectoggetto . (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 Resources proprietà nelle istanze di questa classe. (Ereditato da FrameworkTemplate) |
| ShouldSerializeVisualTree() |
Restituisce un valore che indica se i processi di serializzazione devono serializzare il valore della VisualTree proprietà 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 DispatcherObjectoggetto . (Ereditato da DispatcherObject) |
Implementazioni dell'interfaccia esplicita
| Nome | Descrizione |
|---|---|
| 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) |