Control.DefaultStyleKey Propriété

Définition

Obtient ou définit la clé qui fait référence au style par défaut du contrôle. Les auteurs de contrôles personnalisés utilisent cette propriété pour modifier la valeur par défaut du style utilisé par leur contrôle.

protected:
 property Platform::Object ^ DefaultStyleKey { Platform::Object ^ get(); void set(Platform::Object ^ value); };
IInspectable DefaultStyleKey();

void DefaultStyleKey(IInspectable value);
protected object DefaultStyleKey { get; set; }
Protected Property DefaultStyleKey As Object

Valeur de propriété

Object

Platform::Object

IInspectable

Clé qui fait référence au style par défaut du contrôle. Pour fonctionner correctement dans le cadre de la recherche de style de thème, cette valeur est censée être une valeur System.Type .

Notes

Les extensions de composant Visual C++ (C++/CX) utilisent une chaîne qui est le nom qualifié du type. Mais cela s’appuie sur du code généré qui produit un TypeName une fois qu’un compilateur XAML a accédé ; voir Remarques.

Remarques

DefaultStyleKey est l’une des rares propriétés protégées de l’API Windows Runtime. Il est destiné uniquement à être utilisé par les auteurs de contrôle, qui sous-classeront une classe de contrôle existante et disposeront donc de l’accès nécessaire pour définir cette propriété. Pour de nombreux scénarios de contrôle personnalisé dans lesquels vous allez définir DefaultStyleKey, vous allez également remplacer OnApplyTemplate.

Le type de retour de DefaultStyleKey est légèrement tapé en tant qu’objet dans la syntaxe, mais le système de style XAML s’attend à ce que la valeur fournisse une référence de type :

  • Pour un contrôle dont la logique est écrite en C#, la valeur de DefaultStyleKey doit être une instance de System.Type. En règle générale, vous définissez cette valeur dans le constructeur par défaut :
public CustomControl1()
{
    this.DefaultStyleKey = typeof(CustomControl1);
}
  • Pour un contrôle dont la logique est écrite dans Microsoft Visual Basic, la valeur de DefaultStyleKey doit être une instance de System.Type. En règle générale, vous définissez cette valeur dans le constructeur par défaut :
Public Sub New()
    Me.DefaultStyleKey = GetType(CustomControl1)
End Sub
CustomControl1::CustomControl1() // public: in the header.
{
	DefaultStyleKey(winrt::box_value(L"App1.CustomControl1"));
}
  • Pour un contrôle dont la logique est écrite dans des extensions de composant Visual C++ (C++/CX), la valeur de DefaultStyleKey doit être une chaîne qualifiée d’espace de noms qui est le nom de la classe de contrôle personnalisée. En règle générale, vous définissez cette valeur dans le constructeur par défaut :
CustomControl1::CustomControl1() //public: in the header
{
    DefaultStyleKey = "App1.CustomControl1";
}

Notes

En fin de compte, la chaîne seule ne suffit pas à prendre en charge une référence de type de type extensions de composant Visual C++ (C++/CX). Si vous utilisez les options Ajouter / Nouvel élément / Contrôle modèle dans Explorateur de solutions, les modèles et la prise en charge des extensions de composant Visual C++ (C++/CX) et XAML génèrent des classes qui fournissent des informations IXamlMetadataProvider. Le compilateur XAML peut accéder à ce code lorsque le code XAML est chargé et l’utilise pour valider et créer des types et des membres et joindre les classes partielles. En ce qui concerne ce que vous définissez dans votre propre code d’application, la chaîne est tout ce dont vous avez besoin. Toutefois, si vous êtes curieux, vous pouvez consulter les fichiers XamlTypeInfo.g.h et XamlTypeInfo.g.cpp générés.

Les auteurs de contrôles pouvaient choisir de ne pas fournir de valeur pour DefaultStyleKey, mais c’est rare. Le résultat serait que le style par défaut est celui défini par la classe de base. Dans certains cas (comme pour ContentControl), la valeur est null. Même si vous choisissez de ne pas redéfinir la valeur, assurez-vous que le style par défaut d’origine est utile pour le rendu de votre contrôle.

Lorsqu’un contrôle XAML est chargé, le processus de rendu démarre et le système recherche le modèle approprié à appliquer, ce qui est chargé est le style XAML par défaut du contrôle, y compris son modèle. Le Windows Runtime contient une copie interne de tous les styles par défaut pour tous les contrôles XAML que le Windows Runtime définit. La référence de type dans DefaultStyleKey indique au système la ressource XAML nommée à charger comme ce style. Sous forme XAML, les styles sont réellement clés par type même s’il n’existe aucun mécanisme dans Windows Runtime XAML qui définit explicitement une référence de type. Toutefois, pour toute valeur TargetType , qui est l’attribut qui contient la clé de recherche, elle est implicitement supposée représenter une référence de type sous la forme d’une chaîne. Par exemple, DefaultStyleKey d’un button est un system.Type instance où le nom est « Button », fullName est « Windows.UI.Xaml.Controls.Button ». Le système utilise ces informations pour savoir comment charger le style à partir des ressources internes qui ont TargetType="Button".

Les contrôles personnalisés ne figurent généralement pas dans l’espace de noms XAML par défaut. Au lieu de cela, ils se trouve dans un espace de noms XAML qui a une instruction using: pour référencer l’espace de noms de code de l’application. Par défaut, les projets créent un préfixe « local : » qui mappe cet espace de noms pour vous. Vous pouvez également mapper d’autres espaces de noms XAML pour faire référence à des espaces de noms de code supplémentaires pour les contrôles ou à d’autres codes que votre application définit.

Le préfixe « local: » (ou un autre espace de noms mappé au code et aux espaces de noms de votre application) doit précéder le nom de votre contrôle personnalisé, lorsqu’il est en XAML comme valeur TargetType . Cela est également déjà fait pour vous par les modèles de départ ; lorsque vous ajoutez un nouveau contrôle, vous voyez un fichier generic.xaml qui ne contient qu’un seul style. Ce style aura la valeur TargetType qui est une chaîne commençant par « local : » et terminée par le nom que vous avez choisi pour votre classe de contrôle personnalisée. Pour correspondre aux exemples précédents qui définissent DefaultStyleKey dans une CustomControl1 définition, vous voyez un élément pour <Style TargetType="local:CustomControl1"> défini dans le fichier generic.xaml de départ, et ce style définit le modèle de contrôle ainsi que la définition d’autres propriétés.

Notes

Le préfixe « local: » est isolé dans le CODE XAML où il est défini et utilisé. Les espaces de noms XAML et les préfixes ont une signification uniquement dans XAML et sont autonomes pour chaque fichier XAML. Les valeurs DefaultStyleKey dans le code n’incluent pas les préfixes.

S’applique à

Voir aussi