ControlTemplate Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee geeft u de visuele structuur en gedragsaspecten van een Control die kan worden gedeeld over meerdere exemplaren van het besturingselement.
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
- Overname
- Kenmerken
Voorbeelden
Hieronder ziet u een ButtonStyle die de ControlTemplate van een 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>
Wanneer dit wordt toegepast, wordt het Button weergegeven als een Ellipse:
Wanneer u de Template eigenschap van een Control waarde instelt op een nieuwe ControlTemplate zoals in het bovenstaande voorbeeld, vervangt u de hele sjabloon. Hoe het eruitziet wanneer deze Button zich in de focus bevindt of ingedrukt is, maakt deel uit van de standaardweergave van de knop die u vervangt. Afhankelijk van uw behoeften kunt u daarom de definitie invoeren hoe de knop eruit moet zien wanneer deze wordt ingedrukt, enzovoort, zoals in het volgende voorbeeld:
<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>
In dit voorbeeld wordt verwezen naar resources die hier niet worden weergegeven. Zie Stileren met ControlTemplates Sample voor het volledige voorbeeld. Dit voorbeeld bevat voorbeelden van besturingssjablonen voor veel besturingselementen en is de beste manier om aan de slag te gaan met het maken van besturingssjablonen.
Opmerkingen
Hiermee ControlTemplate kunt u de visuele structuur van een besturingselement opgeven. De auteur van het besturingselement kan de standaard ControlTemplate definiëren en de auteur van de toepassing kan de ControlTemplate visuele structuur van het besturingselement overschrijven.
Controle templating is een van de vele functies die worden aangeboden door het WPF stijl en templating model. Het stijl- en sjabloonmodel biedt u zo'n grote flexibiliteit dat u in veel gevallen uw eigen besturingselementen niet hoeft te schrijven. Als u een auteur van een toepassing bent die de visualisatie van uw besturingselement wil wijzigen of het ControlTemplate bestaande besturingselement wilt vervangen, raadpleegt u het onderwerp Styling en Templating voor voorbeelden en een diepgaande discussie.
Als u uw eigen besturingselement schrijft, raadpleegt u 'Een aangepast besturingselement maken' in het overzicht van het ontwerpen van besturingselementen.
Een ControlTemplate is bedoeld als een zelfstandige eenheid van implementatiedetails die onzichtbaar is voor externe gebruikers en objecten, waaronder stijlen. De enige manier om de inhoud van de besturingselementsjabloon te bewerken, is vanuit dezelfde besturingselementsjabloon.
Gebruik van XAML-eigenschapselement
<ControlTemplate>
<VisualTreeRootNode>
VisualTreeNodeContents
</VisualTreeRootNode>
</ControlTemplate>
XAML-waarden
ControlTemplate Objectelement voor ControlTemplate of een afgeleide klasse.
VisualTreeRootNode Eén XAML-element als het directe onderliggende element van de ControlTemplate (of een afgeleide klasse). Sjablonen moeten één hoofdknooppunt hebben. Om een nuttige sjabloon te genereren, wordt verwacht dat het element dat als VisualTreeRootNode is gekozen, een inhoudsmodel van zichzelf ondersteunt, vaak een model dat meerdere onderliggende elementen ondersteunt.
VisualTreeNodeContents Een of meer elementen die de beoogde sjabloon voltooien. Als het element dat is gekozen als VisualTreeRootNode slechts één onderliggend element ondersteunt, kan er slechts één element worden gedeclareerd als VisualTreeNodeContents. Het is ook mogelijk (hoewel ongebruikelijk) om tekstinhoud op te geven als de gekozen VisualTreeRootNode een eigenschap voor tekstinhoud ondersteunt.
Constructors
| Name | Description |
|---|---|
| ControlTemplate() |
Initialiseert een nieuw exemplaar van de ControlTemplate klasse. |
| ControlTemplate(Type) |
Initialiseert een nieuw exemplaar van de ControlTemplate klasse met het opgegeven doeltype. |
Eigenschappen
| Name | Description |
|---|---|
| Dispatcher |
Hiermee wordt de Dispatcher aan dit DispatcherObject gekoppelde bestand. (Overgenomen van DispatcherObject) |
| HasContent |
Hiermee wordt een waarde opgehaald die aangeeft of deze sjabloon geoptimaliseerde inhoud heeft. (Overgenomen van FrameworkTemplate) |
| IsSealed |
Hiermee wordt een waarde opgehaald die aangeeft of dit object een onveranderbare status heeft, zodat het niet kan worden gewijzigd. (Overgenomen van FrameworkTemplate) |
| Resources |
Hiermee haalt u de verzameling resources op die kunnen worden gebruikt binnen het bereik van deze sjabloon. (Overgenomen van FrameworkTemplate) |
| TargetType |
Hiermee haalt u het type op waarvoor dit is bedoeld of stelt u dit ControlTemplate in. |
| Template |
Hiermee wordt een verwijzing opgehaald of ingesteld naar het object dat de XAML-knooppunten voor de sjabloon registreert of afspeelt wanneer de sjabloon wordt gedefinieerd of toegepast door een schrijver. (Overgenomen van FrameworkTemplate) |
| Triggers |
Hiermee haalt u een verzameling TriggerBase objecten op die eigenschapswijzigingen toepassen of acties uitvoeren op basis van opgegeven voorwaarden. |
| VisualTree |
Hiermee wordt het hoofdknooppunt van de sjabloon opgehaald of ingesteld. (Overgenomen van FrameworkTemplate) |
Methoden
| Name | Description |
|---|---|
| CheckAccess() |
Bepaalt of de aanroepende thread toegang heeft tot dit DispatcherObject. (Overgenomen van DispatcherObject) |
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| FindName(String, FrameworkElement) |
Hiermee zoekt u het element dat is gekoppeld aan de opgegeven naam die in deze sjabloon is gedefinieerd. (Overgenomen van FrameworkTemplate) |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| LoadContent() |
Laadt de inhoud van de sjabloon als een exemplaar van een object en retourneert het hoofdelement van de inhoud. (Overgenomen van FrameworkTemplate) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| RegisterName(String, Object) |
Registreert een nieuw naam-/objectpaar in het huidige naambereik. (Overgenomen van FrameworkTemplate) |
| Seal() |
Hiermee wordt de sjabloon vergrendeld zodat deze niet kan worden gewijzigd. (Overgenomen van FrameworkTemplate) |
| ShouldSerializeResources(XamlDesignerSerializationManager) |
Retourneert een waarde die aangeeft of serialisatieprocessen de waarde van de Resources eigenschap moeten serialiseren op exemplaren van deze klasse. (Overgenomen van FrameworkTemplate) |
| ShouldSerializeVisualTree() |
Retourneert een waarde die aangeeft of serialisatieprocessen de waarde van de VisualTree eigenschap moeten serialiseren op exemplaren van deze klasse. (Overgenomen van FrameworkTemplate) |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |
| UnregisterName(String) |
Hiermee verwijdert u een naam/objecttoewijzing uit de XAML-naamscoop. (Overgenomen van FrameworkTemplate) |
| ValidateTemplatedParent(FrameworkElement) |
Hiermee wordt de bovenliggende sjabloon gecontroleerd op basis van een set regels. |
| VerifyAccess() |
Hiermee wordt afgedwongen dat de aanroepende thread toegang heeft tot dit DispatcherObject. (Overgenomen van DispatcherObject) |
Expliciete interface-implementaties
| Name | Description |
|---|---|
| INameScope.FindName(String) |
Retourneert een object met de opgegeven identificatienaam. (Overgenomen van FrameworkTemplate) |
| IQueryAmbient.IsAmbientPropertyAvailable(String) |
Query's of een opgegeven omgevingseigenschap beschikbaar is in het huidige bereik. (Overgenomen van FrameworkTemplate) |