Dela via


{StaticResource} markup-tillägg

Ger ett värde för alla XAML-attribut genom att utvärdera en referens till en redan definierad resurs. Resurser definieras i en ResourceDictionary och en StaticResource-användning refererar till nyckeln för resursen i ResourceDictionary.

XAML-attributanvändning

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

XAML-värden

Begrepp Description
key Nyckeln för den begärda resursen. Den här nyckeln tilldelas ursprungligen av ResourceDictionary. En resursnyckel kan vara valfri sträng som definieras i XamlName-grammatiken.

Anmärkningar

StaticResource är en teknik för att hämta värden för ett XAML-attribut som definieras någon annanstans i en XAML-resursordlista. Värden kan placeras i en resursordlista eftersom de är avsedda att delas av flera egenskapsvärden, eller för att en XAML-resursordlista används som en XAML-paketerings- eller faktorteknik. Ett exempel på en XAML-paketeringsteknik är temaordlistan för en kontroll. Ett annat exempel är sammanfogade resursordlistor som används för resursåterställning.

StaticResource tar ett argument som anger nyckeln för den begärda resursen. En resursnyckel är alltid en sträng i Windows Runtime XAML. Mer information om hur resursnyckeln ursprungligen anges finns i x:Key-attribut.

De regler enligt vilka en StaticResource löser till en post i en resursordbok beskrivs inte i det här avsnittet. Det beror på om referensen och resursen båda finns i en mall, om sammanfogade resursordlistor används och så vidare. Mer information om hur du definierar resurser och korrekt använder en ResourceDictionary, inklusive exempelkod, finns i ResourceDictionary- och XAML-resursreferenser.

Viktig En StaticResource får inte försöka göra en vidarereferens till en resurs som definieras lexikalt ytterligare i XAML-filen. Försök att göra det stöds inte. Även om en framåtreferens inte misslyckas, medför försök att göra en en prestandapåföljd. För bästa resultat justerar du sammansättningen av dina resursordlistor så att framåtreferenser undviks.

Försök att ange en StaticResource till en nyckel som inte kan lösas genererar ett XAML-parsningsfel vid körning. Designverktyg kan också erbjuda varningar eller fel.

I Windows Runtime XAML-processorimplementeringen finns det ingen stödklassrepresentation för StaticResource-funktioner . StaticResource är exklusivt för användning i XAML. Den närmaste motsvarigheten i kod är att använda samlings-API:et för en ResourceDictionary, till exempel att anropa Contains eller TryGetValue.

{ThemeResource} markeringstillägg är ett liknande tillägg som refererar till namngivna resurser på en annan plats. Skillnaden är att {ThemeResource}-markeringstillägget har möjlighet att returnera olika resurser beroende på vilket systemtema som är aktivt. Mer information finns i {ThemeResource} markeringstillägg.

StaticResource är ett tillägg för markering. Markeringstillägg implementeras vanligtvis när det finns ett krav på att escape-attributvärden ska vara andra än literalvärden eller hanterarnamn, och kravet är mer globalt än att bara placera typkonverterare på vissa typer eller egenskaper. Alla markeringstillägg i XAML använder tecknen "{" och "}" i attributsyntaxen, vilket är den konvention genom vilken en XAML-processor känner igen att ett markeringstillägg måste bearbeta attributet.

Ett exempel på {StaticResource}-användning

Det här exemplet på XAML är hämtat från XAML-databindningsexempel.

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

Det här exemplet skapar ett objekt som backas upp av en anpassad klass och skapar det som en resurs i en ResourceDictionary. För att vara en giltig resurs måste det här local:S2Formatter elementet också ha ett x:Key-attributvärde . Värdet för attributet är inställt på "GradeConverter".

Resursen begärs sedan bara lite längre in i XAML, där du ser {StaticResource GradeConverter}.

Observera hur användningen av {StaticResource}-markeringstillägget anger en egenskap för ett annat markeringstillägg {Binding}-markeringstillägg, så det finns två kapslade markeringstilläggsanvändningar här. Den inre utvärderas först, så att resursen hämtas först och kan användas som ett värde. Samma exempel visas också i {Binding}-markeringstillägget.

Stöd för designverktyg för {StaticResource} -markeringstillägget

Microsoft Visual Studio kan inkludera möjliga värden för nycklar i Microsoft IntelliSense-listrutorna när du använder markup-tillägget {StaticResource} på en XAML-sida. När du till exempel skriver {StaticResource visas någon av resursnycklarna från det aktuella uppslagsomfånget i IntelliSense-listrutorna. Förutom de typiska resurser som du skulle ha på sidnivå (FrameworkElement.Resources) och appnivå (Application.Resources) ser du även XAML-temaresurser och resurser från eventuella tillägg som ditt projekt använder.

När en resursnyckel finns som en del av en {StaticResource} -användning kan funktionen Gå till definition (F12) lösa resursen och visa den ordlista där den har definierats. För temaresurserna går detta till generic.xaml för designtid.