« Resources » : différence entre les versions
De Banane Atomic
Aller à la navigationAller à la recherche
(Une version intermédiaire par le même utilisateur non affichée) | |||
Ligne 55 : | Ligne 55 : | ||
<Application.Resources> | <Application.Resources> | ||
<ResourceDictionary> | <ResourceDictionary> | ||
<!-- Fusion des fichiers de ressources avec les ressources précédemment déclarées --> | <!-- Fusion des fichiers de ressources avec les ressources précédemment déclarées --> | ||
Ligne 64 : | Ligne 62 : | ||
<ResourceDictionary Source="Skins/Icons.xaml" /> | <ResourceDictionary Source="Skins/Icons.xaml" /> | ||
</ResourceDictionary.MergedDictionaries> | </ResourceDictionary.MergedDictionaries> | ||
<!-- Autres ressources avec leurs clés --> | |||
<SolidColorBrush Color="#333333" x:Key="myBrush"/> | |||
</ResourceDictionary> | </ResourceDictionary> | ||
</Application.Resources> | </Application.Resources> | ||
</Application> | </Application> | ||
</filebox> | </filebox> | ||
<filebox fn='Skins/MainSkin.xaml' lang='xaml'> | <filebox fn='Skins/MainSkin.xaml' lang='xaml'> | ||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | ||
Ligne 74 : | Ligne 77 : | ||
</ResourceDictionary> | </ResourceDictionary> | ||
</filebox> | </filebox> | ||
<kode lang='csharp'> | <kode lang='csharp'> | ||
// Dans le code-behind | // Dans le code-behind | ||
Ligne 80 : | Ligne 84 : | ||
Application.Current.Resources.MergedDictionaries.Add(rd); | Application.Current.Resources.MergedDictionaries.Add(rd); | ||
</kode> | </kode> | ||
<u>Ordre de recherche des ressources:</u> | <u>Ordre de recherche des ressources:</u> | ||
# Le dictionnaire principal | # Le dictionnaire principal | ||
Ligne 87 : | Ligne 92 : | ||
{{info | Les clés doivent être uniques au sein d'un dictionnaire, mais peuvent exister dans différents dictionnaires agrégés.}} | {{info | 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 = | ||
<kode lang='csharp'> | <kode lang='csharp'> | ||
// génère une ResourceReferenceKeyNotFoundException si la ressource n'est pas trouvée | // génère une ResourceReferenceKeyNotFoundException si la ressource n'est pas trouvée | ||
Ligne 99 : | Ligne 104 : | ||
Style monStyle = (Style)Application.Current.Resources["clé"]; // l'objet Application | Style monStyle = (Style)Application.Current.Resources["clé"]; // l'objet Application | ||
Style monStyle = (Style)this.Resources["clé"]; // l'objet courant | 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"] | |||
</kode> | </kode> | ||
<u>Ordre de recherche:</u> | <u>Ordre de recherche:</u> | ||
# dictionnaire de ressources de l'objet appelant {{boxx|FindResource}} ou {{boxx|TryFindResource}} | # dictionnaire de ressources de l'objet appelant {{boxx|FindResource}} ou {{boxx|TryFindResource}} |
Dernière version du 19 octobre 2021 à 21:23
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> <!-- 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> <!-- Autres ressources avec leurs clés --> <SolidColorBrush Color="#333333" x:Key="myBrush"/> </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