Partager via


Control.Template Propriété

Définition

Obtient ou définit un modèle de contrôle. Le modèle de contrôle définit l’apparence visuelle d’un contrôle dans l’interface utilisateur et est défini dans le balisage XAML.

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>

Valeur de propriété

Modèle qui définit l’apparence du contrôle. ControlTemplate doit avoir exactement un élément racine comme contenu.

Exemples

Cet exemple montre un modèle de contrôle plus complet défini en tant que Style et Setter avec la valeur Setter.Property de « Template ». Il s’agit d’un style nommé pour un contrôle RadioButton . Il inclut les éléments de modèle qui font normalement partie d’un modèle de contrôle fonctionnel, tels qu’un VisualStateManager.VisualStateGroups élément de propriété attaché à l’élément racine du modèle, et les valeurs d’attribut x :Name attribuées à chacune des parties de contrôle importantes.

<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> 

Remarques

La deuxième syntaxe XAML illustrée ci-dessus est une syntaxe Setter dans le cadre d’un Style. C’est ainsi qu’une valeur de modèle pour un contrôle est définie dans presque tous les cas.

TargetType est un attribut obligatoire sur tous les éléments ControlTemplate utilisés comme valeur template. La valeur doit correspondre à la propriété TargetType du style qui contient l’élément Setter for Template, si vous utilisez une syntaxe de jeu de style.

Le ControlTemplate spécifie l’apparence d’un contrôle ; si un contrôle n’a pas de ControlTemplate, le contrôle n’aura aucune présence visible dans votre application. L’auteur du contrôle définit le modèle de contrôle par défaut, et l’auteur de l’application peut reformuler le XAML ControlTemplate pour redéfinir l’arborescence visuelle du contrôle.

Les modèles de contrôle sont généralement définis en XAML (Extensible Application Markup Language) dans le cadre d’un style implicite spécifique au contrôle. Dans ce cas, une valeur Property dans setter est définie comme chaîne « Template », et la valeur Setter.Value est définie en tant qu’élément de propriété, qui contient un élément objet ControlTemplate . Par exemple, il s’agit du Style qui définit une valeur de modèle pour un ScrollViewer. Il s’agit d’un exemple de style implicite, où le style peut être dans un ResourceDictionary , mais n’a pas besoin d’un attribut x :Key.

<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>

Styles et modèles

Vous pouvez utiliser un setter dans un style pour appliquer des valeurs à n’importe quelle propriété de dépendance. Mais c’est le Setter de la propriété Template d’une classe dérivée du contrôle qui constitue la majorité du balisage XAML dans un style classique. Lorsqu’un Style est utilisé pour définir un modèle de contrôle, le TargetType de l’élément Style et le TargetType de l’élément ControlTemplate pour son setter Control.Template doivent toujours utiliser la même valeur. Le setter de modèles définit la définition d’interface utilisateur modèle de base pour un contrôle où ce modèle est appliqué. Il contient également les états visuels d’un contrôle et d’autres définitions d’interface utilisateur basées sur l’état, telles que les transitions de thème par défaut. Pour un contrôle complexe tel que ListBox, le modèle par défaut Style et le ControlTemplate dans peuvent avoir des centaines de lignes de XAML. Pour plus d’informations sur le rôle du modèle dans les scénarios de création de modèles de contrôle, consultez Modèles de contrôle XAML.

Styles implicites

Vous pouvez définir des styles de sorte qu’un Style soit utilisé implicitement par tous les objets du même TargetType, sans exiger que chaque instance d’un tel objet référence spécifiquement le Style en tant que valeur FrameworkElement.Style. Lorsqu’une <Style> ressource est déclarée dans un ResourceDictionary sans attribut x :Key, la valeur x :Key utilise la valeur de la propriété TargetType . Si vous définissez le style implicitement, le style est appliqué uniquement aux types qui correspondent exactement au TargetType et non aux éléments dérivés de la valeur TargetType . Par exemple, si vous créez un style implicitement pour tous les contrôles ToggleButton de votre application et que votre application a des contrôles ToggleButton et CheckBox (CheckBox dérive de ToggleButton), le style implicite « ToggleButton » est appliqué uniquement aux contrôles ToggleButton .

S’applique à

Voir aussi