Freigeben über


{StaticResource}-Markuperweiterung

Stellt einen Wert für jedes XAML-Attribut bereit, indem ein Verweis auf eine bereits definierte Ressource ausgewertet wird. Ressourcen werden in einem ResourceDictionary definiert, und eine StaticResource-Verwendung verweist auf den Schlüssel dieser Ressource im ResourceDictionary.

XAML-Attributsyntax

<object property="{StaticResource key}" .../>

XAML-Werte

Begriff Beschreibung
Schlüssel Der Schlüssel für die angeforderte Ressource. Dieser Schlüssel wird zunächst vom ResourceDictionary zugewiesen. Ein Ressourcenschlüssel kann eine beliebige in der XamlName-Grammatik definierte Zeichenfolge sein.

Hinweise

StaticResource ist ein Verfahren zum Abrufen von Werten für ein XAML-Attribut, das an anderer Stelle in einem XAML-Ressourcenwörterbuch definiert ist. Werte können in ein Ressourcenwörterbuch eingefügt werden, da sie von mehreren Eigenschaftswerten gemeinsam verwendet werden sollen, oder weil ein XAML-Ressourcenwörterbuch als XAML-Paket- oder Factoring-Technik verwendet wird. Ein Beispiel für eine XAML-Verpackungstechnik ist das Designwörterbuch für ein Steuerelement. Ein weiteres Beispiel ist zusammengeführte Ressourcenwörterbücher, die für den Ressourcenfallback verwendet werden.

StaticResource verwendet ein Argument, das den Schlüssel für die angeforderte Ressource angibt. Ein Ressourcenschlüssel ist immer eine Zeichenfolge in Windows-Runtime XAML. Weitere Informationen dazu, wie der Ressourcenschlüssel anfänglich angegeben wird, finden Sie unter "x:Key"-Attribut.

Die Regeln, nach denen eine StaticResource in ein Element in einem Ressourcenwörterbuch aufgelöst wird, werden in diesem Thema nicht beschrieben. Dies hängt davon ab, ob der Verweis und die Ressource in einer Vorlage vorhanden sind, ob zusammengeführte Ressourcenwörterbücher verwendet werden usw. Weitere Informationen zum Definieren von Ressourcen und zur ordnungsgemäßen Verwendung eines ResourceDictionary, einschließlich Beispielcode, finden Sie unter ResourceDictionary- und XAML-Ressourcenverweise.

Wichtig Eine StaticResource darf nicht versuchen, einen Vorwärtsverweis auf eine Ressource vorzunehmen, die lexikalisch weiter in der XAML-Datei definiert ist. Der Versuch, dies zu tun, wird nicht unterstützt. Auch wenn der Vorwärtsverweis nicht fehlschlägt, führt der Versuch, eine Leistungseinbuße zu erzielen. Um optimale Ergebnisse zu erzielen, passen Sie die Zusammensetzung Ihrer Ressourcenwörterbücher so an, dass Vorwärtsverweise vermieden werden.

Beim Versuch, eine StaticResource für einen Schlüssel anzugeben, der nicht aufgelöst werden kann, wird zur Laufzeit eine XAML-Analyseausnahme ausgelöst. Designtools können auch Warnungen oder Fehler enthalten.

In der Windows-Runtime XAML-Prozessorimplementierung gibt es keine Sicherungsklassendarstellung für staticResource-Funktionen. StaticResource ist ausschließlich für die Verwendung in XAML vorgesehen. Die nächstgelegene Entsprechung im Code besteht darin, die Sammlungs-API eines ResourceDictionary zu verwenden, z. B. "Contains" oder "TryGetValue".

{ThemeResource}-Markuperweiterung ist eine ähnliche Markuperweiterung , die auf benannte Ressourcen an einem anderen Speicherort verweist. Der Unterschied besteht darin, dass die {ThemeResource}-Markuperweiterung je nach aktivem Systemdesign verschiedene Ressourcen zurückgeben kann. Weitere Informationen finden Sie unter {ThemeResource}-Markuperweiterung.

StaticResource ist eine Markuperweiterung. Markuperweiterungen werden in der Regel implementiert, wenn Attributwerte mit Escapezeichen versehen werden müssen, damit diese nicht als literale Werte oder als Handlernamen betrachtet werden, und diese Anforderung eher global und nicht nur durch den Einsatz von Typkonvertern für bestimmte Typen oder Eigenschaften erfüllt werden soll. Alle Markuperweiterungen in XAML verwenden die Zeichen "{" und "}" in ihrer Attributsyntax. Dies ist die Konvention, mit der ein XAML-Prozessor erkennt, dass eine Markuperweiterung das Attribut verarbeiten muss.

Beispiel für eine {StaticResource}-Verwendung

Dieses Beispiel-XAML stammt aus dem XAML-Datenbindungsbeispiel.

<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> 

In diesem bestimmten Beispiel wird ein Objekt erstellt, das von einer benutzerdefinierten Klasse unterstützt wird, und es als Ressource in einem ResourceDictionary erstellt. Um eine gültige Ressource zu sein, muss dieses local:S2Formatter Element auch einen x:Key-Attributwert aufweisen. Der Wert des Attributs wird auf "GradeConverter" festgelegt.

Die Ressource wird dann nur ein bisschen weiter in den XAML-Code angefordert, wo Sie sehen {StaticResource GradeConverter}.

Beachten Sie, dass die Verwendung der {StaticResource}-Markuperweiterung eine Eigenschaft einer anderen Markuperweiterung {Binding}-Markuperweiterung festlegt, sodass hier zwei geschachtelte Markuperweiterungsverwendungen vorhanden sind. Das innere wird zuerst ausgewertet, sodass die Ressource zuerst abgerufen wird und als Wert verwendet werden kann. Dieses Beispiel wird auch in der {Binding}-Markuperweiterung gezeigt.

Unterstützung von Entwurfszeittools für die {StaticResource} -Markuperweiterung

Microsoft Visual Studio 2013 kann mögliche Schlüsselwerte in die Microsoft IntelliSense-Dropdowns einschließen, wenn Sie die Markuperweiterung {StaticResource} auf einer XAML-Seite verwenden. Sobald Sie beispielsweise "{StaticResource" eingeben, werden alle Ressourcenschlüssel aus dem aktuellen Nachschlagebereich in den IntelliSense-Dropdowns angezeigt. Zusätzlich zu den typischen Ressourcen, die Sie auf Seitenebene (FrameworkElement.Resources) und auf App-Ebene (Application.Resources) haben, werden auch XAML-Designressourcen und Ressourcen aus allen Erweiterungen angezeigt, die Ihr Projekt verwendet.

Sobald ein Ressourcenschlüssel als Teil einer {StaticResource}-Verwendung vorhanden ist, kann das Feature "Gehe zu Definition(F12)" diese Ressource auflösen und Ihnen das Wörterbuch anzeigen, in dem er definiert ist. Für die Designressourcen wechselt dies zur Entwurfszeit zu generic.xaml.