ControlTemplate Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Určuje vizuální strukturu a behaviorální aspekty Control, které lze sdílet napříč několika instancemi ovládacího prvku.
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
- Dědičnost
- Atributy
Příklady
Následující příklad ukazuje ButtonStyle, který nastaví ControlTemplateButton:
<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>
Po použití se Button zobrazí jako Ellipse:
Ukázka
Když nastavíte vlastnost TemplateControl na nový ControlTemplate jako v předchozím příkladu, nahradíte celou šablonu. Vzhled Button, když je fokus nebo stisknutá, je součástí výchozího vzhledu tlačítka, které nahrazujete. Proto v závislosti na vašich potřebách můžete chtít vložit do definice, jak by tlačítko mělo vypadat, když je stisknuto atd., jak je znázorněno v následujícím příkladu:
<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>
Všimněte si, že tento příklad odkazuje na prostředky, které zde nejsou uvedeny. Kompletní ukázku najdete v tématu Styling with ControlTemplates Sample. Tato ukázka obsahuje příklady šablon ovládacích prvků pro mnoho ovládacích prvků a je nejlepší způsob, jak začít vytvářet šablony ovládacích prvků.
Poznámky
ControlTemplate umožňuje určit vizuální strukturu ovládacího prvku. Autor ovládacího prvku může definovat výchozí ControlTemplate a autor aplikace může přepsat ControlTemplate a rekonstruovat vizuální strukturu ovládacího prvku.
Ovládací šablonování je jednou z mnoha funkcí, které nabízí model stylů a šablon WPF. Model stylů a šablon nabízí takovou flexibilitu, že v mnoha případech nemusíte psát vlastní ovládací prvky. Pokud jste autor aplikace, který chce změnit vizualizaci ovládacího prvku nebo nahradit ControlTemplate existujícího ovládacího prvku, podívejte se na téma Styling a Šablonování příklady a podrobnou diskuzi.
Pokud píšete vlastní ovládací prvek, přečtěte si téma Vytvoření vlastního ovládacího prvku v přehledu vytváření ovládacích prvků .
ControlTemplate je určena jako samostatná jednotka podrobností implementace, která je neviditelná pro vnější uživatele a objekty, včetně stylů. Jediným způsobem, jak manipulovat s obsahem šablony ovládacího prvku, je ze stejné šablony ovládacího prvku.
Použití elementu vlastnosti XAML
<ControlTemplate>
<VisualTreeRootNode>
VisualTreeNodeContents
</VisualTreeRootNode>
</ControlTemplate>
Hodnoty XAML
ControlTemplate Object element pro ControlTemplate nebo odvozenou třídu.
VisualTreeRootNode jeden prvek XAML jako bezprostřední podřízený prvek ControlTemplate (nebo odvozené třídy). Šablony musí mít jeden kořenový uzel. Aby bylo možné vygenerovat užitečnou šablonu, očekává se, že element zvolený jako VisualTreeRootNode podporuje vlastní model obsahu, často model, který podporuje více podřízených prvků.
VisualTreeNodeContents jeden nebo více prvků, které dokončily zamýšlenou šablonu. Pokud element zvolený jako VisualTreeRootNode podporuje pouze jednu podřízenou položku, může být deklarován pouze jeden prvek jako VisualTreeNodeContents. Je také možné (i když neobvyklé) poskytnout textový obsah, pokud zvolený VisualTreeRootNode podporuje vlastnost textového obsahu.
Konstruktory
ControlTemplate() |
Inicializuje novou instanci ControlTemplate třídy. |
ControlTemplate(Type) |
Inicializuje novou instanci ControlTemplate třídy se zadaným cílovým typem. |
Vlastnosti
Dispatcher |
Získá Dispatcher tento DispatcherObject je přidružen. (Zděděno od DispatcherObject) |
HasContent |
Získá hodnotu, která označuje, zda tato šablona má optimalizovaný obsah. (Zděděno od FrameworkTemplate) |
IsSealed |
Získá hodnotu, která označuje, zda tento objekt je v neměnném stavu, takže jej nelze změnit. (Zděděno od FrameworkTemplate) |
Resources |
Získá nebo nastaví kolekci prostředků, které lze použít v oboru této šablony. (Zděděno od FrameworkTemplate) |
TargetType |
Získá nebo nastaví typ, pro který je tento ControlTemplate určen. |
Template |
Získá nebo nastaví odkaz na objekt, který zaznamenává nebo přehrává uzly XAML pro šablonu při definování nebo použití šablony zapisovačem. (Zděděno od FrameworkTemplate) |
Triggers |
Získá kolekci TriggerBase objekty, které aplikují změny vlastností nebo provádějí akce na základě zadaných podmínek. |
VisualTree |
Získá nebo nastaví kořenový uzel šablony. (Zděděno od FrameworkTemplate) |
Metody
CheckAccess() |
Určuje, zda volající vlákno má přístup k této DispatcherObject. (Zděděno od DispatcherObject) |
Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
FindName(String, FrameworkElement) |
Vyhledá prvek přidružený k zadanému názvu definovanému v rámci této šablony. (Zděděno od FrameworkTemplate) |
GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
LoadContent() |
Načte obsah šablony jako instanci objektu a vrátí kořenový prvek obsahu. (Zděděno od FrameworkTemplate) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
RegisterName(String, Object) |
Zaregistruje novou dvojici názvu nebo objektu do aktuálního oboru názvů. (Zděděno od FrameworkTemplate) |
Seal() |
Uzamkne šablonu, aby ji nebylo možné změnit. (Zděděno od FrameworkTemplate) |
ShouldSerializeResources(XamlDesignerSerializationManager) |
Vrátí hodnotu, která určuje, zda serializace procesy serializovat hodnotu Resources vlastnost instance této třídy. (Zděděno od FrameworkTemplate) |
ShouldSerializeVisualTree() |
Vrátí hodnotu, která určuje, zda serializace procesy serializovat hodnotu VisualTree vlastnost instance této třídy. (Zděděno od FrameworkTemplate) |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
UnregisterName(String) |
Odebere mapování názvu nebo objektu z oboru názvů XAML. (Zděděno od FrameworkTemplate) |
ValidateTemplatedParent(FrameworkElement) |
Zkontroluje nadřazenou šablonu proti sadě pravidel. |
VerifyAccess() |
Vynucuje, že volající vlákno má přístup k tomuto DispatcherObject. (Zděděno od DispatcherObject) |
Explicitní implementace rozhraní
INameScope.FindName(String) |
Vrátí objekt, který má zadaný název identifikace. (Zděděno od FrameworkTemplate) |
IQueryAmbient.IsAmbientPropertyAvailable(String) |
Dotazuje, zda je zadaná okolí vlastnost k dispozici v aktuálním oboru. (Zděděno od FrameworkTemplate) |