Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte.
Traduction
Source

ControlTemplate, classe

Spécifie la structure visuelle et les aspects comportementaux d'un Control qui peuvent être partagés par plusieurs instances du contrôle.

Espace de noms :  System.Windows.Controls
Assembly :  PresentationFramework (dans PresentationFramework.dll)
XMLNS pour XAML : http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation

[DictionaryKeyPropertyAttribute("TargetType")]
[LocalizabilityAttribute(LocalizationCategory.None, Readability = Readability.Unreadable)]
public class ControlTemplate : FrameworkTemplate
<ControlTemplate>
  <VisualTreeRootNode>
VisualTreeNodeContents
  </VisualTreeRootNode>
</ControlTemplate>

Valeurs XAML

ControlTemplate

Élément objet pour ControlTemplate ou une classe dérivée.

VisualTreeRootNode

Élément XAML unique servant d'enfant immédiat de la ControlTemplate (ou d'une classe dérivée). Les modèles doivent avoir un seul nœud racine. Afin de générer un modèle utile, l'élément choisi en tant que VisualTreeRootNode est supposé prendre en charge un modèle de contenu propre, souvent un modèle qui prend en charge plusieurs éléments enfants.

VisualTreeNodeContents

Un ou plusieurs éléments qui complètent le modèle prévu. Si l'élément choisi en tant que VisualTreeRootNode prend uniquement en charge un seul enfant, il ne peut y avoir qu'un seul élément déclaré comme VisualTreeNodeContents. Il est également possible (bien que rare) de fournir du contenu sous forme de texte si l'objet VisualTreeRootNode choisi prend en charge une propriété de contenu textuel.

Le type ControlTemplate expose les membres suivants.

  NomDescription
Méthode publiqueControlTemplate()Initialise une nouvelle instance de la classe ControlTemplate.
Méthode publiqueControlTemplate(Type)Initialise une nouvelle instance de la classe ControlTemplate à l'aide du type de cible spécifié.
Début

  NomDescription
Propriété publiqueDispatcherObtient le Dispatcher associé à DispatcherObject. (Hérité de DispatcherObject.)
Propriété publiqueHasContentObtient une valeur qui indique si ce modèle a optimisé le contenu. (Hérité de FrameworkTemplate.)
Propriété publiqueIsSealedObtient une valeur qui indique si cet objet est dans un état immuable (c'est-à-dire qu'il ne peut pas être modifié). (Hérité de FrameworkTemplate.)
Propriété publiqueResourcesObtient ou définit la collection des ressources qui peuvent être utilisées dans la portée de ce modèle. (Hérité de FrameworkTemplate.)
Propriété publiqueTargetTypeObtient ou définit le type auquel ControlTemplate est destiné.
Propriété publiqueTemplateObtient ou définit une référence à l'objet qui enregistre ou lit les nœuds XAML pour le modèle lorsque le modèle est défini ou appliqué par un writer. (Hérité de FrameworkTemplate.)
Propriété publiqueTriggersObtient une collection d'objets TriggerBase qui appliquent des modifications de propriété ou effectuent des actions selon des conditions spécifiées.
Propriété publiqueVisualTreeObtient ou définit le nœud racine du modèle. (Hérité de FrameworkTemplate.)
Début

  NomDescription
Méthode publiqueCheckAccessDétermine si le thread appelant a accès à ce DispatcherObject. (Hérité de DispatcherObject.)
Méthode publiqueEquals(Object)Détermine si l'Object spécifié est égal à l'Object en cours. (Hérité de Object.)
Méthode protégéeFinalize Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de nettoyage avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.)
Méthode publiqueFindNameRecherche l'élément associé au nom spécifié défini dans ce modèle. (Hérité de FrameworkTemplate.)
Méthode publiqueGetHashCodeSert de fonction de hachage pour un type particulier. (Hérité de Object.)
Méthode publiqueGetTypeObtient le Type de l'instance actuelle. (Hérité de Object.)
Méthode publiqueLoadContentCharge le contenu du modèle en tant qu'instance d'un objet et retourne l'élément racine du contenu. (Hérité de FrameworkTemplate.)
Méthode protégéeMemberwiseCloneCrée une copie superficielle de l'objet Object actif. (Hérité de Object.)
Méthode publiqueRegisterNameInscrit une nouvelle paire nom-objet dans la portée de nom active. (Hérité de FrameworkTemplate.)
Méthode publiqueSealVerrouille le modèle de façon à ce qu'il ne puisse pas être modifié. (Hérité de FrameworkTemplate.)
Méthode publiqueShouldSerializeResourcesRetourne une valeur qui indique si les processus de sérialisation doivent sérialiser la valeur de la propriété Resources sur les instances de cette classe. (Hérité de FrameworkTemplate.)
Méthode publiqueShouldSerializeVisualTreeRetourne une valeur qui indique si les processus de sérialisation doivent sérialiser la valeur de la propriété VisualTree sur les instances de cette classe. (Hérité de FrameworkTemplate.)
Méthode publiqueToStringRetourne une chaîne qui représente l'objet actuel. (Hérité de Object.)
Méthode publiqueUnregisterNameSupprime un mappage nom/objet de la portée de nom XAML. (Hérité de FrameworkTemplate.)
Méthode protégéeValidateTemplatedParentVérifie le parent basé sur des modèles par rapport à un ensemble de règles. (Substitue FrameworkTemplate.ValidateTemplatedParent(FrameworkElement).)
Méthode publiqueVerifyAccessGarantit que le thread appelant a accès à DispatcherObject. (Hérité de DispatcherObject.)
Début

  NomDescription
Implémentation d'interface expliciteMéthode privéeINameScope.FindNameInfrastructure. Retourne un objet qui porte le nom d'identification fourni. (Hérité de FrameworkTemplate.)
Implémentation d'interface expliciteMéthode privéeIQueryAmbient.IsAmbientPropertyAvailableDemande si une propriété ambiante spécifiée est disponible dans la portée actuelle. (Hérité de FrameworkTemplate.)
Début

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

exemple de ControlTemplate de bouton

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


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.

.NET Framework

Pris en charge dans : 4, 3.5, 3.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft