03sept. 2013

WPF - CustomControl : charger le style par défaut

Un Custom Control en WPF est un contrôle graphique créé de zéro par le développeur. Il est composé d'une classe sur laquelle on applique un style.

Au niveau de Visual Studio, il existe un modèle de projet CustomControl qui crée automatiquement un fichier.cs et un fichier XAML contenant le style à appliquer au contrôle.

Nous allons voir quels sont les points de configuration clés pour créer un CustomControl sans passer par ce template.

Déclarer correctement le Style

Il faut déclarer le type cible du Style de la manière suivante :

<Style TargetType="{x:Type local:MyControlClass}" >
</Style>

Que faisons nous avec cette déclaration ? Nous indiquons à WPF que toutes les instances de type local:MyControlClass doivent être rendues avec ce style. Notez bien l'absence de l'attribut x:Key.

Si nous l'avions spécifié nous aurions du préciser à chaque appel le style à utiliser avec la déclaration :

Style={StaticResource keyOfMyStyle}

Respecter l'arborescence

CaptureCustom

L'arborescence doit avoir un dossiers Themes contenant un ResourceDictionary nommé Generic.xaml. A la racine se trouve la classe contenant la logic graphique du contrôle myCustomControl1.

Forcer le style par défaut du contrôle

 static CustomControl1()
{
    DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), 
        new FrameworkPropertyMetadata(typeof(CustomControl1)));
}

Depuis le constructeur statique, nous allons définir la stylekey par défaut.

Configurer l'assembly

A l'intérieur du fichier AssemblyInfo.cs, s'assurer que ces lignes sont présentes :

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, 
    ResourceDictionaryLocation.SourceAssembly 
)]

L'attribut ThemeInfo permet de définir où se trouve les dictionnaires pour les contrôles définis dans l'assembly.

  • Le premier argument précise les resources spécifiques au thème
  • Le deuxième argument précise les ressources NON spécifiques au thème.

C'est ce deuxième paramètre qui permet à WPF de lier le style avec la classe du contrôle.

Sources

aucun commentaire

Fil des commentaires de ce billet

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.