Control.Template Eigenschaft

Definition

Dient zum Abrufen oder Festlegen einer Steuerelementvorlage. 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 vollständigere Steuerelementvorlage, die als Formatvorlage und Setter mit dem Wert "Setter.Property " von "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 VisualStateManager.VisualStateGroups angefügtes Eigenschaftselement, das dem Stammelement der Vorlage zugeordnet ist, und x:Name-Attributwerte , die jedem der prominenten 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 einer Formatvorlage. So 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 Vorlagenwert verwendet werden. Der Wert sollte mit der TargetType-Eigenschaft für die Formatvorlage übereinstimmen, die den Setter für Die Vorlage enthält, wenn Sie eine Formatvorlagensatzsyntax verwenden.

Die ControlTemplate gibt die Darstellung eines Steuerelements an; Wenn ein Steuerelement nicht über eine ControlTemplate verfügt, hat das Steuerelement in Ihrer App keine sichtbaren Anwesenheitsinformationen. Der Steuerelementautor definiert die Standardsteuerelementvorlage, und der App-Autor kann die Steuerelementvorlagen-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 Eigenschaftswert im Setter als Zeichenfolge "Template" festgelegt, und der Wert "Setter.Value " wird als Eigenschaftselement festgelegt, das ein ControlTemplate-Objektelement enthält. Dies ist beispielsweise die Formatvorlage , die einen Vorlagenwert für einen ScrollViewer definiert. Dies ist ein Beispiel für eine implizite Formatvorlage, in der sich die Formatvorlage in einem ResourceDictionary befinden 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 einer Formatvorlage verwenden, um Werte auf jede Abhängigkeitseigenschaft anzuwenden. Es ist jedoch der Setter für die Template-Eigenschaft einer von Steuerelement abgeleiteten Klasse, die den Großteil des XAML-Markups in einem typischen Stil darstellt. Wenn eine Formatvorlage zum Definieren einer Steuerelementvorlage verwendet wird, sollte der TargetType des Style-Elements und der TargetType des ControlTemplate-Elements für seinen Control.Template-Setter immer denselben Wert verwenden. Der Vorlagensetter definiert die grundlegende Vorlagen-UI-Definition für ein Steuerelement, auf das diese Vorlage angewendet wird. Sie enthält auch die visuellen Zustände für ein Steuerelement und andere zustandsbasierte UI-Definitionen wie Standarddesignübergänge. Bei komplexen Steuerelementen wie ListBox kann die Standardvorlagenvorlage "Style" und " ControlTemplate " Hunderte von XAML-Zeilen enthalten. Weitere Informationen zur Rolle der Vorlage in Steuerelementvorlagenszenarien finden Sie unter XAML-Steuerelementvorlagen.

Implizite Formatvorlagen

Sie können Formatvorlagen so definieren, dass eine Formatvorlage implizit von allen Objekten desselben TargetType verwendet wird, ohne dass jede Instanz eines solchen Objekts explizit auf den Style als FrameworkElement.Style-Wert verweist. Wenn eine <Style> Ressource in einem ResourceDictionary ohne ein x:Key-Attribut deklariert wird, verwendet der x:Key-Wert den Wert der TargetType-Eigenschaft . Wenn Sie die Formatvorlage implizit festlegen, wird die Formatvorlage nur auf die Typen angewendet, die dem TargetType exakt entsprechen 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 abgeleitet von ToggleButton), wird die implizite Formatvorlage "ToggleButton" nur auf die ToggleButton-Steuerelemente angewendet.

Gilt für:

Weitere Informationen