Control.Template Eigenschaft

Definition

Ruft eine Steuerelementvorlage ab oder legt diese fest. Die Steuerelementvorlage definiert die visuelle Darstellung eines Steuerelements in der Benutzeroberfläche und wird im XAML-Markup definiert.

public:
 property ControlTemplate ^ Template { ControlTemplate ^ get(); void set(ControlTemplate ^ value); };
ControlTemplate Template();

void Template(ControlTemplate value);
public ControlTemplate Template { get; set; }
var controlTemplate = control.template;
control.template = controlTemplate;
Public Property Template As ControlTemplate
<control Template="{StaticResource templateResourceKey}"/>
- or -
<Style TargetType="controlTypeName">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="controlTypeName">
        templateRoot
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

Eigenschaftswert

Die Vorlage, die die Darstellung des Steuerelements definiert. Die ControlTemplate muss genau ein Stammelement als Inhalt aufweisen.

Beispiele

Dieses Beispiel zeigt eine umfassendere Steuerelementvorlage, die als Style und Setter mit dem Setter.Property-Wert "Template" definiert ist. Dies ist eine benannte Formatvorlage für ein RadioButton-Steuerelement . Es enthält die Vorlagenelemente, die normalerweise Teil einer funktionalen Steuerelementvorlage sind, z. B. ein angefügtes VisualStateManager.VisualStateGroups-Eigenschaftselement , das an das Stammelement der Vorlage angefügt ist, und x:Name-Attributwerte , die jedem der markanten Steuerelementteile zugewiesen sind.

<Style x:Key="TextRadioButtonStyle" TargetType="RadioButton"> 
    <Setter Property="MinWidth" Value="0"/> 
    <Setter Property="MinHeight" Value="0"/> 
    <Setter Property="Template"> 
        <Setter.Value> 
            <ControlTemplate TargetType="RadioButton"> 
                <Grid Background="Transparent"> 
                    <TextBlock 
                        x:Name="Text" 
                        Text="{TemplateBinding Content}" 
                        Margin="3,-7,3,10" 
                        TextWrapping="NoWrap" 
                        Style="{StaticResource SubheaderTextStyle}"/> 
                    <Rectangle 
                        x:Name="FocusVisualWhite" 
                        IsHitTestVisible="False" 
                        Stroke="{StaticResource FocusVisualWhiteStrokeThemeBrush}" 
                        StrokeEndLineCap="Square" 
                        StrokeDashArray="1,1" 
                        Opacity="0" 
                        StrokeDashOffset="1.5"/> 
                    <Rectangle 
                        x:Name="FocusVisualBlack" 
                        IsHitTestVisible="False" 
                        Stroke="{StaticResource FocusVisualBlackStrokeThemeBrush}" 
                        StrokeEndLineCap="Square" 
                        StrokeDashArray="1,1" 
                        Opacity="0" 
                        StrokeDashOffset="0.5"/> 

                    <VisualStateManager.VisualStateGroups> 
                        <VisualStateGroup x:Name="CommonStates"> 
                            <VisualState x:Name="Normal"/> 
                            <VisualState x:Name="PointerOver"> 
                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPointerOverForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Pressed"> 

                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPressedForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Disabled"> 
                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ButtonDisabledForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                        </VisualStateGroup> 
                        <VisualStateGroup x:Name="FocusStates"> 
                            <VisualState x:Name="Focused"> 
                                <Storyboard> 
                                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualWhite" Storyboard.TargetProperty="Opacity"/> 
                                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualBlack" Storyboard.TargetProperty="Opacity"/> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Unfocused"/> 
                        </VisualStateGroup> 
                        <VisualStateGroup x:Name="CheckStates"> 
                            <VisualState x:Name="Checked"/> 
                            <VisualState x:Name="Unchecked"> 
                                <Storyboard> 
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationSecondaryForegroundThemeBrush}"/> 
                                    </ObjectAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </VisualState> 
                            <VisualState x:Name="Indeterminate"/> 
                        </VisualStateGroup> 
                    </VisualStateManager.VisualStateGroups> 
                </Grid> 
            </ControlTemplate> 
        </Setter.Value> 
    </Setter> 
</Style> 

Hinweise

Die zweite oben gezeigte XAML-Syntax ist eine Setter-Syntax als Teil eines Stils. Auf diese Weise wird in fast allen Fällen ein Vorlagenwert für ein Steuerelement definiert.

TargetType ist ein erforderliches Attribut für alle ControlTemplate-Elemente , die als Template-Wert verwendet werden. Der Wert sollte mit der TargetType-Eigenschaft für den Style übereinstimmen, der den Setter für Template enthält, wenn Sie eine Stil-Setter-Syntax verwenden.

Die ControlTemplate gibt die Darstellung eines Steuerelements an. Wenn ein Steuerelement nicht über eine ControlTemplate verfügt, ist das Steuerelement in Ihrer App nicht sichtbar. Der Autor des Steuerelements definiert die Standardsteuerelementvorlage, und der App-Autor kann die ControlTemplate-XAML neu erstellen, um die visuelle Struktur des Steuerelements neu zu definieren.

Steuerelementvorlagen werden in der Regel in XAML (Extensible Application Markup Language) als Teil eines steuerelementspezifischen impliziten Stils festgelegt. In diesem Fall wird ein Property-Wert im Setter als Zeichenfolge "Template" und der Wert Setter.Value als Eigenschaftselement festgelegt, das ein ControlTemplate-Objektelement enthält. Dies ist beispielsweise der Stil , der einen Template-Wert für einen ScrollViewer definiert. Dies ist ein Beispiel für einen impliziten Stil, bei dem der Style in einem ResourceDictionary enthalten sein kann, aber kein x:Key-Attribut benötigt.

<ResourceDictionary>
  <Style TargetType="ScrollViewer">
  ...
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="ScrollViewer">
          <!--visual root of template for a ScrollViewer-->
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
  ...
</ResourceDictionary>

Stile und Vorlagen

Sie können einen Setter in einem Style verwenden, um Werte auf jede Abhängigkeitseigenschaft anzuwenden. Es ist jedoch der Setter für die Template-Eigenschaft einer von Control abgeleiteten Klasse, die den Großteil des XAML-Markups in einem typischen Style ausmacht. Wenn ein Style verwendet wird, um eine Steuerelementvorlage zu definieren, sollten targetType des Style-Elements und TargetType des ControlTemplate-Elements für dessen Control.Template-Setter immer den gleichen Wert verwenden. Der Vorlagensetter definiert die grundlegende Definition der Benutzeroberfläche mit Vorlagen für ein Steuerelement, in dem diese Vorlage angewendet wird. Sie enthält auch die visuellen Zustände für ein Steuerelement und andere zustandsbasierte UI-Definitionen, z. B. Standarddesignübergänge. Bei einem komplexen Steuerelement wie ListBox können der Standardvorlagenstil und die ControlTemplate in Hunderte von XAML-Zeilen enthalten. Weitere Informationen zur Rolle der Vorlage in Steuerelementvorlagenszenarien finden Sie unter Schnellstart: Steuerelementvorlagen.

Implizite Stile

Sie können Stile so definieren, dass ein Style implizit von allen Objekten desselben TargetType verwendet wird, ohne dass jedes instance eines solchen Objekts speziell auf den Style als FrameworkElement.Style-Wert verweisen muss. Wenn eine <Style> Ressource in einem ResourceDictionary ohne x:Key-Attribut deklariert wird, verwendet der x:Key-Wert den Wert der TargetType-Eigenschaft . Wenn Sie den Stil implizit festlegen, wird die Formatvorlage nur auf die Typen angewendet, die genau mit dem TargetType übereinstimmen, und nicht auf Elemente, die vom TargetType-Wert abgeleitet sind. Wenn Sie beispielsweise implizit eine Formatvorlage für alle ToggleButton-Steuerelemente in Ihrer Anwendung erstellen und Ihre Anwendung über ToggleButton - und CheckBox-Steuerelemente verfügt (CheckBox wird von ToggleButton abgeleitet), wird der implizite Stil "ToggleButton" nur auf die ToggleButton-Steuerelemente angewendet.

Gilt für:

Weitere Informationen