FrameworkElement.OnApplyTemplate Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Appelé chaque fois que le code d’application ou les processus internes (par exemple, une passe de disposition de reconstruction) appellent ApplyTemplate. En termes simples, cela signifie que la méthode est appelée juste avant qu’un élément d’interface utilisateur ne s’affiche dans votre application. Remplacez cette méthode pour influencer la logique post-modèle par défaut d’une classe.
protected:
virtual void OnApplyTemplate() = OnApplyTemplate;
void OnApplyTemplate();
protected virtual void OnApplyTemplate();
function onApplyTemplate()
Protected Overridable Sub OnApplyTemplate ()
Exemples
Cet exemple montre un remplacement OnApplyTemplate défini par un contrôle personnalisé. La substitution est conçue pour prendre en compte les appelants susceptibles de définir et d’appliquer leur propre modèle de contrôle via le modèle et le système de style. Dans le cadre de sa définition, le contrôle attribue les éléments nommés dans un modèle qui sont requis, tels que « UpButton ». Ensuite, OnApplyTemplate récupère les références d’objet en fonction de ce contrat de nommage lorsque le modèle est chargé, en appelant GetTemplateChild. (Les valeurs définies, par exemple « UpButtonElement », font référence aux champs privés définis au niveau de la classe afin que les autres membres de la classe puissent référencer cette partie en tant qu’objet au moment de l’exécution.) En outre, cet exemple appelle la méthode UpdateStates
privée (définition non affichée). Il s’agit d’un autre scénario courant pour OnApplyTemplate : s’assurer que l’état visuel est défini pour l’état de départ du contrôle, dans ce cas, en appelant une méthode privée qui prend en compte tous les états définis du contrôle et appelle GoToState pour définir l’état approprié.
protected override void OnApplyTemplate()
{
UpButtonElement = GetTemplateChild("UpButton") as RepeatButton;
DownButtonElement = GetTemplateChild("DownButton") as RepeatButton;
TextElement = GetTemplateChild("TextBlock") as TextBlock;
UpdateStates(false);
}
Protected Overloads Sub OnApplyTemplate()
UpButtonElement = TryCast(GetTemplateChild("UpButton"), RepeatButton)
DownButtonElement = TryCast(GetTemplateChild("DownButton"), RepeatButton)
TextElement = TryCast(GetTemplateChild("TextBlock"), TextBlock)
UpdateStates(False)
End Sub
Remarques
Bien que OnApplyTemplate soit une méthode définie par la classe FrameworkElement , le comportement d’OnApplyTemplate et les scénarios de substitution d’OnApplyTemplate sont principalement pertinents pour une sous-classe Control . En effet, la propriété Template que vous définissez généralement dans un fichier XAML et la logique de Windows Runtime interne qui applique les modèles sont spécifiquement destinées aux contrôles. Un comportement de modèle spécialisé existe également pour ContentPresenter et ContentControl.
Remarques aux implémenteurs
Il existe une implémentation de base de cette méthode implémentée comme un comportement interne Windows Runtime, qui fournit une logique de disposition de base. Vous devez toujours appeler l’implémentation de base à partir de votre implémentation. Le fait de ne pas référencer l’implémentation de base peut entraîner un comportement de disposition indésirable.
Les classes dérivées peuvent utiliser cette méthode comme notification ou point d’entrée pour les scénarios suivants :
- Générez le reste d’une arborescence visuelle à l’aide de code personnalisé.
- Exécutez du code qui ne peut fonctionner qu’une fois que l’arborescence visuelle définie par XAML à partir de modèles a été appliquée. Par exemple, le code qui obtient des références à des éléments nommés provenant d’un modèle, en appelant GetTemplateChild, afin que les membres de ces parties puissent être référencés par d’autres codes d’exécution post-modèle.
- Introduisez des services qui n’ont de sens qu’une fois l’arborescence visuelle des modèles terminée.
- Attachez des gestionnaires d’événements définis par la classe à des parties du modèle ou au parent de contrôle d’un contrôle composite. Par exemple, vous pouvez souhaiter que la logique de classe gère les événements KeyDown routés à partir d’un modèle TextBox faisant partie d’un contrôle composite. Vous devez effectuer cette opération afin que les états de l’interface utilisateur soient mis à jour en fonction de l’événement d’entrée de bas niveau du composant, et que d’autres événements spécifiques à votre contrôle et déclenchés par le parent de contrôle soient déclenchés à la place.
- Définissez les états et les propriétés des éléments dans le modèle qui dépendent d’autres facteurs. Par exemple, les valeurs de propriété peuvent être découvertes uniquement en connaissant l’élément parent ou lorsqu’une classe dérivée spécifique utilise un modèle commun. Toutefois, notez qu’un contrôle bien conçu doit gérer ses états visuels avec VisualStateManager. Pour plus d’informations sur ce concept, consultez Démarrage rapide : Modèles de contrôle.
OnApplyTemplate est souvent un point plus approprié pour gérer les ajustements de l’arborescence visuelle créée par le modèle que l’événement Loaded . L’événement Loaded peut se produire avant l’application du modèle, et l’arborescence visuelle peut être incomplète à partir de Loaded.