Resources
De Banane Atomic
Aller à la navigationAller à la recherche
Exemples
Réutiliser un ToolTip définit dans les ressources
<Window.Resources> <ToolTip x:Key="MyToolTip" Content="contenu du tooltip" /> </Window.Resources> <TextBox ToolTip="{StaticResource MyToolTip}" /> <Label ToolTip="{StaticResource ResourceKey=MyToolTip}" /> |
Modifier une ressource
<Window.Resources> <SolidColorBrush x:Key="tbBrush" Color="Red"></SolidColorBrush> </Window.Resources> <TextBlock Foreground="{DynamicResource tbBrush}">Hello!</TextBlock> |
this.Resources["tbBrush"] = new SolidColorBrush(Colors.Blue); |
StaticResource vs DynamicResource
StaticResource | La ressource est recherché lors du chargement du fichier XAML. La ressource doit être déclarée avant son utilisation. |
DynamicResource | Évaluée lors de chaque utilisation de la ressource. |
// remplacement d'une ressource (brush) par une autre // StaticResource: l'ancienne couleur est toujours utilisée // DynamicResource: la nouvelle couleur est bien utilisée Application.Current.Resources["clé"] = new SolidColorBrush(Colors.Blue); |
Créer une liaison DynamicResource dans le code behind
// équivalent de Foreground="{DynamicResource clé} myTextBlock.SetResourceReference(ForegroundProperty, "clé"); |
Pack URI
Spécifie le chemin où trouver le fichier contenant les ressources.
<ResourceDictionary Source="pack://application:,,,/Nom.de.lAssemblage;component/Dossier/Fichier.xaml" /> |
Merge dictionaries
Permet de fusionner plusieurs fichiers de ressources.
App.xaml |
<Application> <Application.Resources> <ResourceDictionary> <!-- Autres ressources avec leurs clés --> <SolidColorBrush Color="#333333" x:Key="myBrush"/> <!-- Fusion des fichiers de ressources avec les ressources précédemment déclarées --> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Skins/MainSkin.xaml" /> <!-- Icônes SVG au format XAML --> <ResourceDictionary Source="Skins/Icons.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application> |
Skins/MainSkin.xaml |
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <!-- Ressources avec leurs clés --> </ResourceDictionary> |
// Dans le code-behind var rd = new ResourceDictionary(); rd.Source = new Uri("Skins/MainSkin.xaml", UriKind.Relative); Application.Current.Resources.MergedDictionaries.Add(rd); |
Ordre de recherche des ressources:
- Le dictionnaire principal
- Les dictionnaires agrégés
- dans l'ordre de leur déclaration XAML
- dans l'ordre inverse de leur ajout dans le code-behind (le dernier ajouté est le premier parcourut)
Les clés doivent être uniques au sein d'un dictionnaire, mais peuvent exister dans différents dictionnaires agrégés. |
Récupérer une ressource depuis le code-behind
// génère une ResourceReferenceKeyNotFoundException si la ressource n'est pas trouvée Style monStyle = (Style)this.FindResource("clé"); // pas d'exception si la ressource n'est pas trouvée Style monStyle = (Style)this.TryFindResource("clé"); // recherche exclusivement dans un dictionnaire de ressources donné // pas d'exception si la ressource n'est pas trouvée Style monStyle = (Style)Application.Current.Resources["clé"]; // l'objet Application Style monStyle = (Style)this.Resources["clé"]; // l'objet courant // get style from a nuget library ResourceDictionary ExternalLibResourceDictionary = new ResourceDictionary { Source = new Uri("/My.Namespace;component/MyResource.xaml", UriKind.RelativeOrAbsolute) }; Style myStyle = (Style)ExternalLibResourceDictionary["ResourceKey"] |
Ordre de recherche:
- dictionnaire de ressources de l'objet appelant FindResource ou TryFindResource
- dictionnaire de ressources de son conteneur et ainsi de suite jusqu'au conteneur principale
- dictionnaire de ressources de l'objet Application
- dictionnaire associé aux thèmes Windows
- ressources représentant les objets du système