Rozšíření syntaxe {StaticResource}

Poskytuje hodnotu pro libovolný atribut XAML vyhodnocením odkazu na již definovaný prostředek. Prostředky jsou definovány v ResourceDictionary a použití StaticResource odkazuje na klíč tohoto prostředku v ResourceDictionary.

Použití atributu XAML

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

Hodnoty XAML

Term Description
klíč Klíč požadovaného prostředku. Tento klíč je původně přiřazen ResourceDictionary. Klíč prostředku může být libovolný řetězec definovaný v jazyce XamlName Grammar.

Poznámky

StaticResource je technika pro získání hodnot pro atribut XAML, které jsou definovány jinde ve slovníku prostředků XAML. Hodnoty mohou být umístěny ve slovníku prostředků, protože jsou určeny ke sdílení více hodnotami vlastností nebo protože slovník prostředků XAML se používá jako balíček XAML nebo technika faktoringu. Příkladem techniky balení XAML je slovník motivu ovládacího prvku. Dalším příkladem jsou sloučené slovníky prostředků používané pro náhradu prostředků.

StaticResource přebírá jeden argument, který určuje klíč požadovaného prostředku. Klíč prostředku je vždy řetězec v prostředí prostředí Windows Runtime XAML. Další informace o počátečním zadání klíče prostředku najdete v tématu x:Key – atribut.

Pravidla, podle kterých se StaticResource vyhodnocuje na položku ve slovníku prostředků, nejsou popsaná v tomto tématu. To závisí na tom, jestli odkaz a prostředek existují v šabloně, jestli se používají sloučené slovníky prostředků atd. Další informace o tom, jak definovat prostředky a správně používat ResourceDictionary, včetně ukázkového kódu, najdete v tématu Odkazy na prostředky ResourceDictionary a XAML.

Důležité: StaticResource se nesmí pokoušet o odkaz vpřed na prostředek, který je v souboru XAML definován lexikálně později. Pokus o to není podporován. I když odkaz vpřed neselže, pokus o jeho vytvoření přináší výkonovou penalizaci. Nejlepších výsledků dosáhnete tak, že upravíte konstrukci slovníků prostředků tak, aby se zabránilo dopředným odkazům.

Pokus o specifikaci StaticResource pro klíč, který nelze rozpoznat, vyvolá výjimku analýzy XAML za běhu. Nástroje pro návrh můžou také nabízet upozornění nebo chyby.

V implementaci procesoru XAML prostředí prostředí Windows Runtime neexistuje žádná reprezentace třídy pro funkci StaticResource . StaticResource je výhradně pro použití v JAZYCE XAML. Nejbližším ekvivalentem v kódu je použití rozhraní API kolekce ResourceDictionary, například volání Contains nebo TryGetValue.

Rozšíření značek {ThemeResource} je obdobné značkovací rozšíření, které odkazuje na pojmenované prostředky na jiném místě. Rozdíl je v tom, že rozšíření značek {ThemeResource} má schopnost vracet různé prostředky v závislosti na aktivním systémovém motivu. Další informace naleznete v rozšíření značek {ThemeResource}.

StaticResource je rozšíření značek. Rozšíření značek se obvykle implementují, pokud existuje požadavek, aby hodnoty atributů byly jiné než literální hodnoty nebo názvy handlerů, a požadavek je globálnější než jen vkládání převaděčů typů na určité typy nebo vlastnosti. Všechna rozšíření značek v XAML používají znaky {a "}" v syntaxi atributů, což je konvence, kterou procesor XAML rozpozná, že rozšíření značek musí atribut zpracovat.

Příklad využití {StaticResource}

Tento příklad XAML je převzat z ukázky datové vazby 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> 

Tento konkrétní příklad vytvoří objekt, který je podporován vlastní třídou, a vytvoří ho jako prostředek v ResourceDictionary. Aby byl platný prostředek, musí mít tento local:S2Formatter prvek také hodnotu atributu x:Key . Hodnota atributu je nastavena na GradeConverter.

Prostředek je pak vyžadován o něco dále v XAML, kde vidíte {StaticResource GradeConverter}.

Všimněte si, jak využití rozšíření značek {StaticResource} nastavuje vlastnost jiného rozšíření značek {Binding}, takže tady jsou dvě vnořené rozšíření značek. Vnitřní prvek je vyhodnocen jako první, aby se zdroj získal nejdříve a mohl být použit jako hodnota. Stejný příklad je také znázorněn v rozšíření zápisu {Binding}.

Podpora značkovacího rozšíření {StaticResource} nástroji pro návrh

Microsoft Visual Studio může v rozevíracích seznamech Microsoft IntelliSense obsahovat možné hodnoty klíče, když na stránce XAML použijete rozšíření značek {StaticResource}. Například jakmile zadáte "{StaticResource", zobrazí se v rozevíracím seznamu IntelliSense libovolný z klíčů prostředků z aktuálního oboru vyhledávání. Kromě typických prostředků, které byste měli na úrovni stránky (FrameworkElement.Resources) a na úrovni aplikace (Application.Resources), uvidíte také zdroje motivu XAML a zdroje ze všech rozšíření, která váš projekt používá.

Jakmile klíč prostředku existuje jako součást jakéhokoli použití {StaticResource} , funkce Přejít k definici (F12) dokáže tento prostředek vyřešit a zobrazit slovník, ve kterém je definovaný. V případě prostředků motivu jde tento postup do souboru generic.xaml pro čas návrhu.