Classes de paramètres du modèleTemplate settings classes

PrérequisPrerequisites

Il est supposé que vous savez ajouter des contrôles à une interface utilisateur, définir leurs propriétés et joindre des gestionnaires d’événements.We assume that you can add controls to your UI, set their properties, and attach event handlers. Pour obtenir des instructions sur l’ajout de contrôles à une application, voir Ajouter des contrôles et gérer les événements.For instructions for adding controls to your app, see Add controls and handle events. Nous partons également du principe que vous connaissez les bases de la définition d’un modèle personnalisé d’un contrôle en modifiant une copie du modèle par défaut.We also assume that you know the basics of how to define a custom template for a control by making a copy of the default template and editing it. Pour plus d’informations, voir Démarrage rapide : modèles de contrôles.For more info on this, see Quickstart: Control templates.

Scénario relatif aux classes TemplateSettingsThe scenario for TemplateSettings classes

Les classes TemplateSettings fournissent un ensemble de propriétés qui sont utilisées lorsque vous définissez un nouveau modèle pour un contrôle.TemplateSettings classes provide a set of properties that are used when you define a new control template for a control. Les propriétés possèdent des valeurs, par exemple des mesures en pixels, correspondant à la taille de certains éléments d’interface utilisateur.The properties have values such as pixel measurements for the size of certain UI element parts. Ces valeurs sont parfois des valeurs calculées qui proviennent de la logique de contrôle qui n’est généralement pas facile à remplacer ni même accessible.The values are sometimes calculated values that come from control logic that isn't typically easy to override or even access. Certaines propriétés se veulent des valeurs From et To qui contrôlent les transitions et les animations des parties. Les propriétés TemplateSettings appropriées sont donc fournies par paires.Some of the properties are intended as From and To values that control transitions and animations of parts, and thus the relevant TemplateSettings properties come in pairs.

Voici plusieurs classes TemplateSettings.There are several TemplateSettings classes. Elles figurent toutes dans l’espace de noms Windows.UI.Xaml.Controls.Primitives.All of them are in the Windows.UI.Xaml.Controls.Primitives namespace. Voici une liste des classes et un lien vers la propriété TemplateSettings du contrôle approprié.Here's a list of the classes, and a link to the TemplateSettings property of the relevant control. Cette propriété TemplateSettings indique comment accéder aux valeurs TemplateSettings du contrôle et établir des liaisons de modèle à ses propriétés :This TemplateSettings property is how you access the TemplateSettings values for the control, and can establish template bindings to its properties:

Les propriétés TemplateSettings sont toujours destinées à être utilisées en XAML.TemplateSettings properties are always intended to be used in XAML, not code. Ce sont des sous-propriétés en lecture seule d’une propriété TemplateSettings en lecture seule d’un contrôle parent.They are read-only sub-properties of a read-only TemplateSettings property of a parent control. Pour un scénario de contrôle personnalisé avancé, lorsque vous créez une classe basée sur Control et pouvez donc influer sur la logique de contrôle, pensez à définir une propriété TemplateSettings personnalisée sur le contrôle pour communiquer des informations pouvant être utiles à toute personne qui recrée le modèle du contrôle.For an advanced custom control scenario, where you're creating a new Control-based class and thus can influence the control logic, consider defining a custom TemplateSettings property on the control in order to communicate info that might be useful for anyone that is re-templating the control. Pour la valeur de cette propriété en lecture seule, définissez une nouvelle classe TemplateSettings liée à votre contrôle qui possède des propriétés en lecture seule pour chacune des informations qui sont pertinentes pour les mesures de modèle, le positionnement d’animation, etc. et qui donnent aux appelants l’instance d’exécution de cette classe, qui est initialisée à l’aide de votre logique de contrôle.As that property's read-only value, define a new TemplateSettings class related to your control that has read-only properties for each of the info items that are relevant for template measurements, animation positioning, and so on, and give callers the runtime instance of that class that's initialized using your control logic. Les classes TemplateSettings sont dérivées de DependencyObject afin que les propriétés puissent utiliser le système de propriétés de dépendance pour les rappels de modification de propriété.TemplateSettings classes are derived from DependencyObject, so that the properties can use the dependency property system for property-changed callbacks. Mais les identificateurs de propriété de dépendance pour les propriétés ne sont pas exposés comme API publique, car les propriétés TemplateSettings sont censées être en lecture seule pour les appelants.But the dependency property identifiers for the properties aren't exposed as public API, because the TemplateSettings properties are meant to be read-only to callers.

Comment utiliser TemplateSettings dans un modèle de contrôleHow to use TemplateSettings in a control template

Voici un exemple qui provient des modèles de contrôles XAML par défaut de départ.Here's an example that comes from the starting default XAML control templates. Celui-ci particulier provient du modèle par défaut de ProgressRing:This particular one is from the default template of ProgressRing:

<Ellipse
    x:Name="E1"
    Style="{StaticResource ProgressRingEllipseStyle}"
    Width="{Binding RelativeSource={RelativeSource TemplatedParent}, 
        Path=TemplateSettings.EllipseDiameter}"
    Height="{Binding RelativeSource={RelativeSource TemplatedParent}, 
        Path=TemplateSettings.EllipseDiameter}"
    Margin="{Binding RelativeSource={RelativeSource TemplatedParent}, 
        Path=TemplateSettings.EllipseOffset}"
    Fill="{TemplateBinding Foreground}"/>

Comme le code XAML complet du modèle ProgressRing contient des centaines de lignes, il s’agit là d’un extrait minuscule.The full XAML for the ProgressRing template is hundreds of lines, so this is just a tiny excerpt. Ce code XAML définit une partie de contrôle qui est l’un des 6 éléments ellipse qui illustrent l’animation en rotation pour une progression indéterminée.This XAML defines a control part that is one of 6 Ellipse elements that portray the spinning animation for indeterminate progress. En tant que développeur, vous n’aimez peut-être pas les cercles et vous souhaitez peut-être utiliser une autre primitive graphique ou une autre forme de base pour la progression de l’animation.As a developer, you might not like the circles and might use a different graphics primitive or a different basic shape for how the animation progresses. Par exemple, vous pouvez composer à la place un ProgressRing utilisant un ensemble d’éléments Rectangle organisés dans un carré.For example, you might compose a ProgressRing that uses a set of Rectangle elements arranged in a square instead. Si tel est le cas, chaque composant Rectangle individuel de votre nouveau modèle peut ressembler à ceci :If so, each individual Rectangle component of your new template might look like this:

<Rectangle
    x:Name="R1"
    Width="{Binding RelativeSource={RelativeSource TemplatedParent}, 
        Path=TemplateSettings.EllipseDiameter}"
    Height="{Binding RelativeSource={RelativeSource TemplatedParent}, 
        Path=TemplateSettings.EllipseDiameter}"
    Margin="{Binding RelativeSource={RelativeSource TemplatedParent}, 
        Path=TemplateSettings.EllipseOffset}"
    Fill="{TemplateBinding Foreground}"/>

Les propriétés TemplateSettings sont utiles ici, car ce sont des valeurs calculées à partir de la logique de contrôle de base de ProgressRing.The reason that the TemplateSettings properties are useful here is because they are calculated values coming from the basic control logic of ProgressRing. Le calcul se divise en ActualWidth et ActualHeight de ProgressRing, et alloue une mesure calculée pour chacun des éléments de mouvement dans ses modèles pour que les composants de modèle puissent s’adapter au contenu.The calculation is dividing up the overall ActualWidth and ActualHeight of the ProgressRing, and allotting a calculated measurement for each of the motion elements in its templates so that the template parts can size to content.

Voici un autre exemple d’utilisation des modèles de contrôles XAML par défaut, qui montre cette fois l’un des ensembles de propriétés qui sont le From et la To d’une animation.Here's another example usage from the default XAML control templates, this time showing one of the property sets that are the From and To of an animation. Il provient du modèle ComboBox par défaut :This is from the ComboBox default template:

<VisualStateGroup x:Name="DropDownStates">
    <VisualState x:Name="Opened">
        <Storyboard>
            <SplitOpenThemeAnimation
               OpenedTargetName="PopupBorder"
               ContentTargetName="ScrollViewer"
               ClosedTargetName="ContentPresenter"
               ContentTranslationOffset="0"
               OffsetFromCenter="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                 Path=TemplateSettings.DropDownOffset}"
               OpenedLength="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                 Path=TemplateSettings.DropDownOpenedHeight}"
               ClosedLength="{Binding RelativeSource={RelativeSource TemplatedParent},
                 Path=TemplateSettings.DropDownClosedHeight}" />
        </Storyboard>
   </VisualState>
...
</VisualStateGroup>

À nouveau, comme le code XAML contient de nombreuses lignes dans le modèle, il ne s’agit là que d’un extrait.Again there is lots of XAML in the template so we only show an excerpt. Et il ne s’agit que d’un des nombreux États et animations de thème qui utilisent chacun les mêmes propriétés ComboBoxTemplateSettings .And this is only one of several states and theme animations that each use the same ComboBoxTemplateSettings properties. Pour ComboBox, l’utilisation des valeurs ComboBoxTemplateSettings par le biais des liaisons impose que les animations associées dans le modèle s’arrêteront et commenceront aux positions qui sont basées sur les valeurs partagées. La transition sera donc parfaite.For ComboBox, use of the ComboBoxTemplateSettings values through bindings enforces that related animations in the template will stop and start at positions that are based on shared values, and thus transition smoothly.

Remarque    Quand vous utilisez des valeurs TemplateSettings dans le cadre de votre modèle de contrôle, veillez à définir des propriétés qui correspondent au type de la valeur.Note   When you do use TemplateSettings values as part of your control template, make sure you're setting properties that match the type of the value. Sinon, vous devrez peut-être créer un convertisseur de valeur pour la liaison afin que le type cible de la liaison puisse être converti à partir d’un type de source différent de la valeur TemplateSettings.If not, you might need to create a value converter for the binding so that the target type of the binding can be converted from a different source type of the TemplateSettings value. Pour plus d’informations, voir IValueConverter.For more info, see IValueConverter.