Extension de balisage {StaticResource}
Fournit une valeur pour n’importe quel attribut XAML en évaluant une référence à une ressource déjà définie. Les ressources sont définies dans un ResourceDictionary et une utilisation StaticResource fait référence à la clé de cette ressource dans ResourceDictionary.
<object property="{StaticResource key}" .../>
Terme | Description |
---|---|
key | Clé pour la ressource demandée. Cette clé est initialement affectée par ResourceDictionary. Une clé de ressource peut être n’importe quelle chaîne définie dans la grammaire XamlName. |
StaticResource est une technique permettant d’obtenir des valeurs pour un attribut XAML qui sont définis ailleurs dans un dictionnaire de ressources XAML. Les valeurs peuvent être placées dans un dictionnaire de ressources, car elles sont destinées à être partagées par plusieurs valeurs de propriété, ou parce qu’un dictionnaire de ressources XAML est utilisé comme une technique d’empaquetage XAML ou de factoring. Un exemple de technique d’empaquetage XAML est le dictionnaire de thème d’un contrôle. Un autre exemple est les dictionnaires de ressources fusionnés utilisés pour la secours des ressources.
StaticResource prend un argument, qui spécifie la clé de la ressource demandée. Une clé de ressource est toujours une chaîne en XAML Windows Runtime. Pour plus d’informations sur la façon dont la clé de ressource est initialement spécifiée, consultez l’attribut x :Key.
Les règles selon lesquelles staticResource se résout en un élément d’un dictionnaire de ressources ne sont pas décrites dans cette rubrique. Cela dépend si la référence et la ressource existent tous les deux dans un modèle, si les dictionnaires de ressources fusionnés sont utilisés, et ainsi de suite. Pour plus d’informations sur la définition des ressources et l’utilisation correcte d’un ResourceDictionary, y compris l’exemple de code, consultez les références de ressources ResourceDictionary et XAML.
Important : StaticResource ne doit pas tenter d’effectuer une référence de transfert à une ressource définie lexicalement plus loin dans le fichier XAML. La tentative de ce faire n’est pas prise en charge. Même si la référence vers l’avant n’échoue pas, essayez de faire en sorte qu’une pénalité de performance soit appliquée. Pour obtenir de meilleurs résultats, ajustez la composition de vos dictionnaires de ressources afin que les références vers l’avant soient évitées.
Tentative de spécification d’une staticResource sur une clé qui ne peut pas résoudre lève une exception d’analyse XAML au moment de l’exécution. Les outils de conception peuvent également proposer des avertissements ou des erreurs.
Dans l’implémentation du processeur XAML Windows Runtime, il n’existe aucune représentation de classe de stockage pour la fonctionnalité StaticResource . StaticResource est exclusivement utilisé en XAML. L’équivalent le plus proche dans le code consiste à utiliser l’API de collection d’un ResourceDictionary, par exemple en appelant Contains ou TryGetValue.
L’extension de balisage {ThemeResource} est une extension de balisage similaire qui fait référence aux ressources nommées dans un autre emplacement. La différence est que l’extension de balisage {ThemeResource} a la possibilité de retourner différentes ressources en fonction du thème système actif. Pour plus d’informations, consultez l’extension de balisage {ThemeResource}.
StaticResource est une extension de balisage. Les extensions de balisage sont généralement implémentées pour éviter que les valeurs d’attribut ne soient autre chose que des valeurs littérales ou des noms de gestionnaire et lorsque l’exigence dépasse le cadre de la définition de convertisseurs de type sur certains types ou propriétés. Toutes les extensions de balisage en XAML utilisent les caractères « { » et « } » dans leur syntaxe d’attribut, c’est-à-dire la convention par laquelle un processeur XAML reconnaît qu’une extension de balisage doit traiter l’attribut.
Cet exemple XAML est extrait de l’exemple de liaison de données XAML.
<StackPanel Margin="5">
<!-- Add converter as a resource to reference it from a Binding. -->
<StackPanel.Resources>
<local:S2Formatter x:Key="GradeConverter"/>
</StackPanel.Resources>
<TextBlock Style="{StaticResource BasicTextStyle}" Text="Percent grade:" Margin="5" />
<Slider x:Name="sliderValueConverter" Minimum="1" Maximum="100" Value="70" Margin="5"/>
<TextBlock Style="{StaticResource BasicTextStyle}" Text="Letter grade:" Margin="5"/>
<TextBox x:Name="tbValueConverterDataBound"
Text="{Binding ElementName=sliderValueConverter, Path=Value, Mode=OneWay,
Converter={StaticResource GradeConverter}}" Margin="5" Width="150"/>
</StackPanel>
Cet exemple particulier crée un objet soutenu par une classe personnalisée et le crée en tant que ressource dans un ResourceDictionary. Pour être une ressource valide, cet local:S2Formatter
élément doit également avoir une valeur d’attribut x :Key . La valeur de l’attribut est définie sur « GradeConverter ».
La ressource est ensuite demandée un peu plus loin dans le code XAML, où vous voyez {StaticResource GradeConverter}
.
Notez comment l’utilisation de l’extension de balisage {StaticResource} définit une propriété d’une autre extension de balisage {Binding} extension de balisage. Il existe donc deux utilisations d’extension de balisage imbriquées ici. L’élément interne est évalué en premier, afin que la ressource soit obtenue en premier et puisse être utilisée comme valeur. Ce même exemple est également illustré dans l’extension de balisage {Binding}.
Microsoft Visual Studio 2013 peut inclure des valeurs de clé possibles dans les listes déroulantes Microsoft IntelliSense lorsque vous utilisez l’extension de balisage {StaticResource} dans une page XAML. Par exemple, dès que vous tapez « {StaticResource », l’une des clés de ressource de l’étendue de recherche actuelle s’affiche dans les listes déroulantes IntelliSense. Outre les ressources classiques dont vous disposez au niveau de la page (FrameworkElement.Resources) et au niveau de l’application (Application.Resources), vous voyez également les ressources de thème XAML et les ressources de toutes les extensions que votre projet utilise.
Une fois qu’une clé de ressource existe dans le cadre de l’utilisation de {StaticResource} , la fonctionnalité Atteindre la définition (F12) peut résoudre cette ressource et vous montrer le dictionnaire où elle est définie. Pour les ressources de thème, il s’agit de generic.xaml pour le temps de conception.