• Facile

Ce cours est visible gratuitement en ligne.

Vous pouvez être accompagné et mentoré par un professeur particulier par visioconférence sur ce cours.

J'ai tout compris !

Mis à jour le 29/04/2014

Les propriétés de dépendances et propriétés attachées

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Il est temps de vous dire la vérité sur les propriétés. Jusqu’à présent, j’ai fait comme si toutes les propriétés que nous avons vues étaient des propriétés classiques au sens C#. Elles sont en fait plus évoluées que ça.

Les propriétés de dépendances

De leurs noms anglais « dependency properties », ces propriétés sont plus complexes que la propriété de base de C# que nous connaissons, à savoir :

public class MaClasse
{
    public int MaPropriete { get; set; }
}

Avec une telle classe, il est possible d’utiliser cette propriété ainsi :

MaClasse maClasse = new MaClasse();
maClasse.MaPropriete = 6;
int valeur = maClasse.MaPropriete;

En XAML, nous avons dit que le code suivant :

<TextBlock Text="Je suis un texte" Foreground="Red" />

correspondait au code C# suivant :

TextBlock monTextBlock = new TextBlock();
monTextBlock.Text = "Je suis un texte";
monTextBlock.Foreground = new SolidColorBrush(Colors.Red);

Ici, on ne le voit pas mais ces deux propriétés sont en fait des propriétés de dépendances. Le vrai appel qui s’opère derrière est équivalent à :

TextBlock monTextBlock = new TextBlock();
monTextBlock.SetValue(TextBlock.TextProperty, "Je suis un texte");
monTextBlock.SetValue(TextBlock.ForegroundProperty, new SolidColorBrush(Colors.Red));

La méthode SetValue est héritée de la classe de base DependencyObject dont héritent tous les UIElement.
La propriété de dépendance étend les fonctionnalités d’une propriété classique C#. C’est la base notamment du système de liaison de données que nous découvrirons plus loin. Cela permet de traiter la valeur d’une propriété en fonction du contexte de l’objet et d’être potentiellement déterminée à partir de plusieurs sources de données. La propriété de dépendance peut également avoir une valeur par défaut et des informations de description.

Pour obtenir la valeur d’une propriété de dépendance, on pourra utiliser :

string text = (string)monTextBlock.GetValue(TextBlock.TextProperty);

Les propriétés attachées

Le mécanisme de propriété attachée permet de rajouter des propriétés à un contexte donné. Prenons par exemple le XAML suivant :

<Canvas>
    <TextBlock Text="Je suis un texte" Canvas.Top="150" Canvas.Left="80" />
</Canvas>

Il est possible d’indiquer la position du TextBlock dans le Canvas. Or, le TextBlock ne possède pas de propriété Canvas.Top ou Canvas.Left. Il s’agit de propriétés attachées qui vont permettre d’indiquer des informations pour le TextBlock, dans le contexte de son conteneur, le Canvas. C’est bien le Canvas qui va se servir de ces propriétés pour placer correctement le TextBlock.
Le même principe s’applique à la grille par exemple, si vous vous rappelez, afin d’indiquer dans quelle ligne ou colonne se place un contrôle :

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <TextBlock Grid.Column="0" Text="Je suis un texte" />
    <TextBlock Grid.Column="1" Text="Je suis un autre texte" />
</Grid>

On utilise ici la propriété attachée Grid.Column pour indiquer à la grille à quel endroit il faut placer nos TextBlock.

Allez, j’arrête de vous embêter avec ces propriétés évoluées. J’en ai rapidement parlé pour que vous sachiez que quand je parle de propriétés, je parle en fait de quelque chose d’un peu plus poussé que ce que nous connaissions déjà.

Ce qu’il faut retenir c’est qu’il y a un système complexe derrière qui est presque invisible pour une utilisation de débutant. Si le sujet vous intéresse, n’hésitez pas à poser des questions ou à aller chercher des informations sur internet.

Sachez enfin qu’il est possible de créer nos propres propriétés de dépendances et nos propres propriétés attachées, mais nous sortons du cadre débutant et je ne le montrerai pas dans ce cours.

  • Les propriétés de dépendances offrent un mécanisme plus complet que la propriété classique C#.

  • Ces propriétés sont utilisées par le moteur XAML pour gérer les styles, la liaison de données, etc.

  • En tant que débutant, nous n’avons pas vraiment besoin de savoir ce qu’il se cache là dessous.

Exemple de certificat de réussite
Exemple de certificat de réussite