Les ressources logiques vous permettent de définir des objets en XAML, qui ne font pas partie de l'arbre visuel mais peuvent être utilisés dans votre interface utilisateur. L'un des exemples de ressource logique est le pinceau, qui est utilisé pour fournir un schéma de couleurs. En général, ces objets sont définis comme des ressources, qui sont utilisées par plusieurs éléments des applications.
<Window.Resources>
<RadialGradientBrush x:Key="myGradientBrush">
<GradientStop Color="Green" Offset="0"/>
<GradientStop Color="Blue" Offset="2"/>
</RadialGradientBrush>
</Window.Resources>
Maintenant, la ressource déclarée ci-dessus peut être utilisée comme ressource statique ou dynamique. Un point à retenir est que, lors de l'utilisation de ressources statiques, elles doivent d'abord être définies dans le code XAML, avant de pouvoir être référencées. Les ressources statiques et dynamiques peuvent être utilisées comme suit :
<Grid Background="{StaticResource myGradientBrush}"></Grid>
ou :
<Grid Background="{DynamicResource myGradientBrush}"></Grid>
La différence entre StaticResource et DynamicResource réside dans la manière dont les ressources sont récupérées par les éléments de référencement. Les StaticResource sont récupérées une seule fois par l'élément de référencement et utilisées pendant toute la durée de vie de la ressource. En revanche, les DynamicResource sont acquises chaque fois que l'objet référencé est utilisé.
En simplifiant, si la propriété de couleur de RadialGradientBrush est changée dans le code en Orange et Rose, alors elle se reflétera sur les éléments seulement quand la ressource est utilisée comme DynamicResource. Voici le code pour changer la ressource dans le code :
RadialGradientBrush radialGradientBrush =
new RadialGradientBrush(Colors.Orange, Colors.Pink);
this.Resources["myGradientBrush"] = radialGradientBrush;
Le démérite de DynamicResource est qu'il réduit les performances de l'application car les ressources sont récupérées à chaque fois qu'elles sont utilisées. La meilleure pratique consiste à utiliser StaticResource jusqu'à ce qu'il y ait une raison spécifique d'utiliser DynamicResource.
Source :
WPF : StaticResource vs. DynamicResource