ControlTemplate Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Anger den visuella strukturen och beteendeaspekterna för en Control som kan delas mellan flera instanser av kontrollen.
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
- Arv
- Attribut
Exempel
Följande visar en ButtonStyle som anger ControlTemplate för en 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>
När detta tillämpas visas som Button :Ellipse
När du anger Template egenskapen för en till en Control ny ControlTemplate som i exemplet ovan ersätter du hela mallen. Hur det Button ser ut när det är i fokus eller trycks är en del av standardutseendet för knappen som du ersätter. Beroende på dina behov kanske du därför vill ange hur din knapp ska se ut när den trycks ned, och så vidare, som i följande exempel:
<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>
Observera att det här exemplet refererar till resurser som inte visas här. Det fullständiga exemplet finns i Styling with ControlTemplates Sample. Det exemplet innehåller exempel på kontrollmallar för många kontroller och är det bästa sättet för dig att komma igång med att skapa kontrollmallar.
Kommentarer
Med ControlTemplate kan du ange den visuella strukturen för en kontroll. Kontrollförfattaren kan definiera standardvärdet ControlTemplate och programförfattaren kan åsidosätta ControlTemplate för att rekonstruera kontrollens visuella struktur.
Kontroll templating är en av de många funktioner som erbjuds av WPF formatering och templating modell. Formaterings- och mallmodellen ger dig så stor flexibilitet att du i många fall inte behöver skriva egna kontroller. Om du är programförfattare och vill ändra visualiseringen av kontrollen eller ersätta en ControlTemplate befintlig kontroll kan du se avsnittet Formatering och mallning för exempel och en djupgående diskussion.
Om du skriver en egen kontroll läser du "Skapa en anpassad kontroll" i Översikt över kontrollredigering.
En ControlTemplate är avsedd att vara en fristående implementeringsenhet som är osynlig för externa användare och objekt, inklusive formatmallar. Det enda sättet att ändra innehållet i kontrollmallen är från samma kontrollmall.
Användning av XAML-egenskapselement
<ControlTemplate>
<VisualTreeRootNode>
VisualTreeNodeContents
</VisualTreeRootNode>
</ControlTemplate>
XAML-värden
ControlTemplate Objektelement för ControlTemplate eller en härledd klass.
VisualTreeRootNode Ett enda XAML-element som omedelbart underordnat ControlTemplate (eller en härledd klass). Mallar måste ha en enda rotnod. För att generera en användbar mall förväntas elementet som väljs som VisualTreeRootNode ha stöd för en egen innehållsmodell, ofta en modell som stöder flera underordnade element.
VisualTreeNodeContents Ett eller flera element som slutför den avsedda mallen. Om elementet som valts som VisualTreeRootNode endast stöder ett enda underordnat element kan det bara finnas ett element som deklareras som VisualTreeNodeContents. Det är också möjligt (även om det är ovanligt) att tillhandahålla textinnehåll om den valda VisualTreeRootNode stöder en textinnehållsegenskap.
Konstruktorer
| Name | Description |
|---|---|
| ControlTemplate() |
Initierar en ny instans av ControlTemplate klassen. |
| ControlTemplate(Type) |
Initierar en ny instans av ControlTemplate klassen med den angivna måltypen. |
Egenskaper
| Name | Description |
|---|---|
| Dispatcher |
Hämtar det Dispatcher som DispatcherObject är associerat med. (Ärvd från DispatcherObject) |
| HasContent |
Hämtar ett värde som anger om den här mallen har optimerat innehåll. (Ärvd från FrameworkTemplate) |
| IsSealed |
Hämtar ett värde som anger om det här objektet är i ett oföränderligt tillstånd så att det inte kan ändras. (Ärvd från FrameworkTemplate) |
| Resources |
Hämtar eller anger den samling resurser som kan användas inom ramen för den här mallen. (Ärvd från FrameworkTemplate) |
| TargetType |
Hämtar eller anger den typ som detta ControlTemplate är avsett för. |
| Template |
Hämtar eller anger en referens till objektet som registrerar eller spelar upp XAML-noderna för mallen när mallen definieras eller tillämpas av en skrivare. (Ärvd från FrameworkTemplate) |
| Triggers |
Hämtar en samling objekt som tillämpar egenskapsändringar TriggerBase eller utför åtgärder baserat på angivna villkor. |
| VisualTree |
Hämtar eller anger mallens rotnod. (Ärvd från FrameworkTemplate) |
Metoder
| Name | Description |
|---|---|
| CheckAccess() |
Avgör om den anropande tråden har åtkomst till den här DispatcherObject. (Ärvd från DispatcherObject) |
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| FindName(String, FrameworkElement) |
Söker efter elementet som är associerat med det angivna namnet som definierats i den här mallen. (Ärvd från FrameworkTemplate) |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| LoadContent() |
Läser in innehållet i mallen som en instans av ett objekt och returnerar rotelementet i innehållet. (Ärvd från FrameworkTemplate) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| RegisterName(String, Object) |
Registrerar ett nytt namn/objektpar i det aktuella namnomfånget. (Ärvd från FrameworkTemplate) |
| Seal() |
Låser mallen så att den inte kan ändras. (Ärvd från FrameworkTemplate) |
| ShouldSerializeResources(XamlDesignerSerializationManager) |
Returnerar ett värde som anger om serialiseringsprocesser ska serialisera värdet Resources för egenskapen på instanser av den här klassen. (Ärvd från FrameworkTemplate) |
| ShouldSerializeVisualTree() |
Returnerar ett värde som anger om serialiseringsprocesser ska serialisera värdet VisualTree för egenskapen på instanser av den här klassen. (Ärvd från FrameworkTemplate) |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |
| UnregisterName(String) |
Tar bort ett namn/objektmappning från XAML-namnskopet. (Ärvd från FrameworkTemplate) |
| ValidateTemplatedParent(FrameworkElement) |
Kontrollerar den överordnade mallen mot en uppsättning regler. |
| VerifyAccess() |
Framtvingar att den anropande tråden har åtkomst till den här DispatcherObject. (Ärvd från DispatcherObject) |
Explicita gränssnittsimplementeringar
| Name | Description |
|---|---|
| INameScope.FindName(String) |
Returnerar ett objekt som har det angivna identifieringsnamnet. (Ärvd från FrameworkTemplate) |
| IQueryAmbient.IsAmbientPropertyAvailable(String) |
Frågar om en angiven omgivande egenskap är tillgänglig i det aktuella omfånget. (Ärvd från FrameworkTemplate) |