Utiliser et mettre à jour des ressources dynamiques

Effectué

Dans l’unité précédente, vous avez défini une ressource dans XAML et vous l’avez utilisée comme valeur statique. Toutefois, dans certains cas, StaticResource n’est pas approprié. Examinez les scénarios suivants :

  • Supposez que vous souhaitez implémenter des thèmes de couleurs qui permettent à l’utilisateur de changer l’apparence de l’application au moment de l’exécution. L’extension de balisage StaticResource effectue la recherche dans le dictionnaire une seule fois, de sorte qu’elle ne peut pas mettre à jour l’interface utilisateur de façon dynamique.

  • Vous stockez les préférences utilisateur sur un serveur web et les chargez au démarrage de l’application. L’extension de balisage StaticResource lève une exception si la clé est introuvable dans le dictionnaire.

Cette unité vous montre comment gérer des problèmes tels que ceux-ci à l’aide de ressources dynamiques.

Comment mettre à jour des ressources au moment de l’exécution

Vous stockez des ressources dans un dictionnaire de ressources. Vous pouvez écrire du code pour mettre à jour ces ressources au moment de l’exécution. Vous pouvez même ajouter de nouvelles ressources ou supprimer des ressources existantes.

Prenons l’exemple suivant :

<ContentPage.Resources>
    <Color x:Key="PanelBackgroundColor">Blue</Color>
</ContentPage.Resources>

Supposons que vous souhaitez modifier la valeur de la ressource PanelBackgroundColor pendant l’exécution de l’application. Vous pouvez ajouter du code au fichier code-behind de la page, afin d’accéder à la propriété Resources. L’exemple suivant met à jour la valeur de ressource de l’exemple XAML précédent avec une couleur différente.

this.Resources["PanelBackgroundColor"] = Colors.Green;

Qu’est-ce que DynamicResource ?

DynamicResource est une autre extension de balisage pour rechercher des ressources dans un dictionnaire de ressources. Elle est similaire à l’extension StaticResource dans la mesure où elle effectue une recherche dans le dictionnaire quand l’objet cible est créé. La différence est qu’elle écoute également les modifications apportées à la ressource dans le dictionnaire. Si la valeur de la ressource dans le dictionnaire change, DynamicResource met automatiquement à jour l’interface utilisateur.

DynamicResource présente un avantage par rapport à StaticResource. Si DynamicResource ne trouve pas la clé dans le dictionnaire, la propriété n’est pas définie. Une clé manquante ne constitue pas une erreur et ne lève pas d’exception, ce qui n’est pas le cas avec StaticResource.

Notes

La nature de l’extension de balisage DynamicResource impose à votre application une petite pénalité en matière de performances. Bien que vous puissiez utiliser DynamicResource à la place de StaticResource dans vos pages XAML, si une ressource ne change pas, vous devez la référencer avec l’extension de balisage StaticResource .

Pour utiliser la couleur d’arrière-plan mise à jour de l’exemple précédent, vous pouvez appliquer DynamicResource dans votre code XAML comme suit :

<ContentPage ...>
    <ContentPage.Resources>
        <Color x:Key="PanelBackgroundColor">Blue</Color>
    </ContentPage.Resources>

    <StackLayout BackgroundColor="{DynamicResource PanelBackgroundColor}">
    ...
    </StackLayout>
</ContentPage>

Si la valeur de la ressource PanelBackgroundColor change, la valeur BackgroundColor du contrôle StackLayout est automatiquement mise à jour.

Contrôle des connaissances

1.

Quelle fonctionnalité une DynamicResource fournit-elle qu’une StaticResource ne fournit pas ?