{StaticResource}-Markuperweiterung{StaticResource} markup extension

Stellt durch Auswerten eines Verweises auf eine bereits definierte Quelle einen Wert für ein beliebiges XAML-Attribut bereit.Provides a value for any XAML attribute by evaluating a reference to an already defined resource. Ressourcen sind in einem ResourceDictionary definiert, und mit der Verwendung einer StaticResource wird auf den Schlüssel dieser Ressource im ResourceDictionary verwiesen.Resources are defined in a ResourceDictionary, and a StaticResource usage references the key of that resource in the ResourceDictionary.

XAML-AttributverwendungXAML attribute usage

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

XAML-WerteXAML values

BegriffTerm BeschreibungDescription
Schlüsselkey Der Schlüssel für die angeforderte Ressource.The key for the requested resource. Dieser Schlüssel wird anfänglich durch das ResourceDictionary zugewiesen.This key is initially assigned by the ResourceDictionary. Ein Ressourcenschlüssel kann eine beliebige in der XamlName-Grammatik definierte Zeichenfolge sein.A resource key can be any string defined in the XamlName Grammar.

HinweiseRemarks

StaticResource ist eine Methode zum Abrufen von Werten für ein XAML-Attribut, die an anderer Stelle in einem XAML-Ressourcenwörterbuch definiert sind.StaticResource is a technique for obtaining values for a XAML attribute that are defined elsewhere in a XAML resource dictionary. Werte können in einem Ressourcenwörterbuch definiert werden, da sie von mehreren Eigenschaftswerten gemeinsam verwendet werden sollen oder ein XAML-Ressourcenwörterbuch als Teil einer XAML-Verpackungs- oder Gestaltungsmethode verwendet wird.Values might be placed in a resource dictionary because they are intended to be shared by multiple property values, or because a XAML resource dictionary is used as a XAML packaging or factoring technique. Ein Beispiel für eine XAML-Verpackungsmethode ist das Designwörterbuch für ein Steuerelement.An example of a XAML packaging technique is the theme dictionary for a control. Ein weiteres Beispiel ist die Verwendung von zusammengeführten Ressourcenwörterbüchern für das Ressourcenfallback.Another example is merged resource dictionaries used for resource fallback.

StaticResource akzeptiert ein Argument, das den Schlüssel für die angeforderte Ressource angibt.StaticResource takes one argument, which specifies the key for the requested resource. Ein Ressourcenschlüssel ist immer eine Zeichenfolge in der Windows-Runtime-XAML.A resource key is always a string in Windows Runtime XAML. Weitere Informationen zum anfänglichen Festlegen des Ressourcenschlüssels finden Sie unter x:Key-Attribut.For more info on how the resource key is initially specified, see x:Key attribute.

Die Regeln, nach denen die Auflösung einer StaticResource zu einem Element in einem Ressourcenwörterbuch erfolgt, wird in diesem Thema nicht beschrieben.The rules by which a StaticResource resolves to an item in a resource dictionary are not described in this topic. Dies hängt davon ab, ob sowohl der Verweis als auch die Ressource in einer Vorlage vorhanden sind, ob zusammengeführte Ressourcenwörterbücher verwendet werden usw.That depends on whether the reference and the resource both exist in a template, whether merged resource dictionaries are used, and so on. Weitere Informationen dazu, wie Sie Ressourcen und Eigenschaften mithilfe eines ResourceDictionary definieren, und zusätzlichen Beispielcode finden Sie unter ResourceDictionary- und XAML-Ressourcenverweise.For more info on how to define resources and properly use a ResourceDictionary, including sample code, see ResourceDictionary and XAML resource references.

Wichtig   eine statikresource darf nicht versuchen, einen vorwärts Verweis auf eine Ressource zu erstellen, die lexikalisch weiter oben in der XAML-Datei definiert ist.Important   A StaticResource must not attempt to make a forward reference to a resource that is defined lexically further within the XAML file. Dieser Versuch wird nicht unterstützt.Attempting to do so is not supported. Auch wenn der weitergeleitete Verweis keinen Fehler verursacht, wird durch den Versuch die Leistung beeinträchtigt.Even if the forward reference doesn't fail, trying to make one carries a performance penalty. Um optimale Ergebnisse zu erzielen, sollten Sie die Ressourcenwörterbücher so erstellen, dass Vorwärtsverweise vermieden werden können.For best results, adjust the composition of your resource dictionaries so that forward references are avoided.

Wenn Sie versuchen, eine StaticResource für einen Schlüssel anzugeben, die nicht aufgelöst werden kann, führt dies zu einer XAML-Analyseausnahme zur Laufzeit.Attempting to specify a StaticResource to a key that cannot resolve throws a XAML parse exception at run time. Entwicklungstools geben unter Umständen auch Warnungen oder Fehler aus.Design tools may also offer warnings or errors.

Die XAML-Prozessorimplementierung der Windows-Runtime enthält keine Sicherungsklassendarstellung für StaticResource-Funktionen.In the Windows Runtime XAML processor implementation, there is no backing class representation for StaticResource functionality. StaticResource ist ausschließlich für die Verwendung in XAML vorgesehen.StaticResource is exclusively for use in XAML. Die weitestgehende Entsprechung im Code ist die Verwendung der Auflistungs-API eines ResourceDictionary, z. B. der Aufruf von Contains oder TryGetValue.The closest equivalent in code is to use the collection API of a ResourceDictionary, for example calling Contains or TryGetValue.

Die {ThemeResource}-Markuperweiterung ist eine ähnliche Markuperweiterung, die auf benannte Ressourcen an einer andere Position verweist.{ThemeResource} markup extension is a similar markup extension that references named resources in another location. Der Unterschied besteht darin, dass die {ThemeResource}-Markuperweiterung je nach aktivem Systemdesign verschiedene Ressourcen zurückgeben kann.The difference is that {ThemeResource} markup extension has the ability to return different resources depending on the system theme that's active. Weitere Informationen finden Sie unter {ThemeResource}-Markuperweiterung.For more info see {ThemeResource} markup extension.

StaticResource ist eine Markuperweiterung.StaticResource is a markup extension. Markuperweiterungen werden in der Regel implementiert, wenn für Attributwerte Escapezeichen verwendet werden müssen, damit sie keine Literalwerte oder Handlernamen darstellen, und es nicht ausreicht, Typkonverter für bestimmte Typen oder Eigenschaften zu verwenden.Markup extensions are typically implemented when there is a requirement to escape attribute values to be other than literal values or handler names, and the requirement is more global than just putting type converters on certain types or properties. Alle Markup Erweiterungen in XAML verwenden die Zeichen "{" und "}" in der Attribut Syntax. dabei handelt es sich um die Konvention, mit der ein XAML-Prozessor erkennt, dass das Attribut von einer Markup Erweiterung verarbeitet werden muss.All markup extensions in XAML use the "{" and "}" characters in their attribute syntax, which is the convention by which a XAML processor recognizes that a markup extension must process the attribute.

{StaticResource}-BeispielverwendungAn example {StaticResource} usage

Der folgende XAML-Beispielcode stammt aus dem XAML-Datenbindungsbeispiel.This example XAML is taken from the XAML data binding sample.

<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, hinter dem eine benutzerdefinierte Klasse steht. Dieses Objekt wird als Ressource in einer ResourceDictionary erstellt.This particular example creates an object that's backed by a custom class, and creates it as a resource in a ResourceDictionary. Dieses local:S2Formatter-Element muss auch einen x:Key-Attributwert haben, um als gültige Ressource zu gelten.To be a valid resource, this local:S2Formatter element must also have an x:Key attribute value. Der Wert des Attributs wird auf "GradeConverter" festgelegt.The value of the attribute is set to "GradeConverter".

Die Ressource wird dann etwas weiter hinten im XAML angefordert, wo {StaticResource GradeConverter} angezeigt wird.The resource is then requested just a bit further into the XAML, where you see {StaticResource GradeConverter}.

Die Syntax der {StaticResource}-Markuperweiterung legt eine Eigenschaft einer anderen Markuperweiterung ({Binding}-Markuperweiterung) fest, sodass zwei geschachtelte Markuperweiterungssyntaxen vorhanden sind.Note how the {StaticResource} markup extension usage is setting a property of another markup extension {Binding} markup extension, so there's two nested markup extension usages here. Die innere wird zuerst ausgewertet, damit die Ressource zuerst abgerufen wird und als Wert verwendet werden kann.The inner one is evaluated first, so that the resource is obtained first and can be used as a value. Dieses Beispiel wird auch in der {Binding}-Markuperweiterung gezeigt.This same example is also shown in {Binding} markup extension.

Unterstützung von Entwurfszeittools für die {StaticResource} -MarkuperweiterungDesign-time tools support for the {StaticResource} markup extension

Microsoft Visual Studio 2013 kann mögliche Schlüsselwerte in die Microsoft IntelliSense-Dropdown Liste einschließen, wenn Sie die {statikresource} -Markup Erweiterung auf einer XAML-Seite verwenden.Microsoft Visual Studio 2013 can include possible key values in the Microsoft IntelliSense dropdowns when you use the {StaticResource} markup extension in a XAML page. Sobald Sie z. B. "{StaticResource" eingeben, wird ein beliebiger Ressourcenschlüssel aus den Designressourcen angezeigt.For example, as soon as you type "{StaticResource", any of the resource keys from the current lookup scope are displayed in the IntelliSense dropdowns. Neben den typischen Ressourcen auf Seitenebene (FrameworkElement.Resources) und App-Ebene (Application.Resources) sehen Sie auch XAML-Designressourcen und Ressourcen aus den von Ihrem Projekt verwendeten Erweiterungen.In addition to the typical resources you'd have at page level (FrameworkElement.Resources) and app level (Application.Resources), you also see XAML theme resources, and resources from any extensions your project is using.

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 sie definiert ist.Once a resource key exists as part of any {StaticResource} usage, the Go To Definition (F12) feature can resolve that resource and show you the dictionary where it's defined. Bei Designressourcen wird dies an generic.xaml für die Entwurfszeit weitergeleitet.For the theme resources, this goes to generic.xaml for design time.