ControlTemplate, classe
Mise à jour : novembre 2007
Spécifie la structure visuelle et les aspects comportementaux d'un Control qui peuvent être partagés par plusieurs instances du contrôle.
Assembly : PresentationFramework (dans PresentationFramework.dll)
XMLNS pour XAML : http://schemas.microsoft.com/winfx/xaml/presentation
[LocalizabilityAttribute(LocalizationCategory.None, Readability = Readability.Unreadable)] public class ControlTemplate : FrameworkTemplate
/** @attribute LocalizabilityAttribute(LocalizationCategory.None, Readability = Readability.Unreadable) */ public class ControlTemplate extends FrameworkTemplate
public class ControlTemplate extends FrameworkTemplate
<ControlTemplate> VisualTree </ControlTemplate>
ControlTemplate vous permet de spécifier la structure visuelle d'un contrôle. L'auteur du contrôle peut définir le modèle ControlTemplate par défaut, tandis que l'auteur de l'application peut substituer ce modèle ControlTemplate afin de reconstruire la structure visuelle du contrôle.
La création de modèles de contrôle est l'une des fonctionnalités proposées par le modèle WPF de création de styles et de modèles. Ce modèle vous offre une flexibilité exceptionnelle qui vous évite, dans de nombreux cas, d'avoir à écrire vos propres contrôles. Si vous êtes l'auteur d'une application et désirez modifier la visualisation de votre contrôle ou remplacer le modèle ControlTemplate d'un contrôle existant, consultez la rubrique Application d'un style et création de modèles pour obtenir des exemples ainsi qu'une description détaillée de ces procédures.
Si vous écrivez votre propre contrôle, consultez la rubrique relative à la création d'un contrôle personnalisé dans la Vue d'ensemble de la création de contrôles.
Un ControlTemplate est conçu comme une unité indépendante de détail d'implémentation, invisible aux utilisateurs extérieurs et aux objets, y compris les styles. La seule façon de manipuler le contenu du modèle de contrôle est de le faire à partir du même modèle de contrôle.
L'exemple suivant montre un Style de Button qui permet de définir le ControlTemplate d'un 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>
Une fois ces paramètres appliqués, le Button prend la forme d'une Ellipse:

Si vous affectez à la propriété Template d'un Control un nouveau ControlTemplate, comme dans l'exemple ci-dessus, le modèle complet est remplacé. La forme que prend le Button lorsqu'il bénéficie du focus ou lorsqu'il est enfoncé fait partie de l'apparence par défaut du bouton que vous remplacez. Par conséquent, selon vos besoins, vous pouvez indiquer dans votre définition la forme que doit prendre votre bouton lorsqu'il est enfoncé, etc., comme dans l'exemple suivant :
<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 x:Name="Border" CornerRadius="2" BorderThickness="1" Background="{StaticResource NormalBrush}" BorderBrush="{StaticResource NormalBorderBrush}"> <ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True"/> </Border> <ControlTemplate.Triggers> <Trigger Property="IsKeyboardFocused" Value="true"> <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DefaultedBorderBrush}" /> </Trigger> <Trigger Property="IsDefaulted" Value="true"> <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DefaultedBorderBrush}" /> </Trigger> <Trigger Property="IsMouseOver" Value="true"> <Setter TargetName="Border" Property="Background" Value="{StaticResource DarkBrush}" /> </Trigger> <Trigger Property="IsPressed" Value="true"> <Setter TargetName="Border" Property="Background" Value="{StaticResource PressedBrush}" /> <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource PressedBorderBrush}" /> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter TargetName="Border" Property="Background" Value="{StaticResource DisabledBackgroundBrush}" /> <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBorderBrush}" /> <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>
Notez que cet exemple fait référence à des ressources qui ne sont pas mentionnées ici. Pour l'exemple complet, consultez Style avec ControlTemplates, exemple. Cet exemple contient des exemples de modèles de contrôle pour de nombreux contrôles et représente pour vous la meilleure introduction avant de vous lancer dans la création de modèles de contrôle.
System.Windows.Threading.DispatcherObject
System.Windows.FrameworkTemplate
System.Windows.Controls.ControlTemplate
Windows Vista
Le .NET Framework et le .NET Compact Framework ne prennent pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.