Prostředky v kódu (WPF .NET)

Tento přehled se zaměřuje na přístup k prostředkům WINDOWS Presentation Foundation (WPF) nebo jejich vytváření pomocí kódu, nikoli syntaxe XAML. Další informace o obecném využití prostředků a prostředcích z hlediska syntaxe XAML najdete v tématu Přehled prostředků XAML.

Přístup k prostředkům z kódu

Klíče, které identifikují definované prostředky XAML, se také používají k načtení konkrétních prostředků, pokud o prostředek požádáte v kódu. Nejjednodušším způsobem, jak načíst prostředek z kódu, je volání FindResource metody TryFindResource z objektů na úrovni architektury ve vaší aplikaci. Rozdíl v chování mezi těmito metodami spočívá v tom, co se stane, když požadovaný klíč nenajdete. FindResource vyvolá výjimku. TryFindResource nevyvolá výjimku, ale vrátí null. Každá metoda vezme klíč prostředku jako vstupní parametr a vrátí volně zadaný objekt.

Klíč prostředku je obvykle řetězec, ale občas neřetězné použití. Vyhledávací logika pro překlad prostředků kódu je stejná jako případ XAML s odkazem na dynamické prostředky. Hledání prostředků začíná z volajícího elementu a pak pokračuje prostřednictvím nadřazených prvků v logickém stromu. Vyhledávání pokračuje dále v prostředcích aplikace, motivech a systémových prostředcích v případě potřeby. Požadavek na kód prostředku bude správně počítat se změnami prostředků, ke kterým došlo během běhu.

Následující příklad kódu ukazuje obslužnou rutinu Click události, která najde prostředek podle klíče a používá vrácenou hodnotu k nastavení vlastnosti.

private void myButton_Click(object sender, RoutedEventArgs e)
{
    Button button = (Button)sender;
    button.Background = (Brush)this.FindResource("RainbowBrush");
}
Private Sub myButton_Click(sender As Object, e As RoutedEventArgs)
    Dim buttonControl = DirectCast(sender, Button)
    buttonControl.Background = DirectCast(Me.FindResource("RainbowBrush"), Brush)
End Sub

Alternativní metodou přiřazení odkazu na prostředek je SetResourceReference. Tato metoda má dva parametry: klíč prostředku a identifikátor konkrétní vlastnosti závislosti, která je přítomna v instanci elementu, ke které má být přiřazena hodnota prostředku. Tato metoda je funkčně stejná a má výhodu, že nevyžaduje přetypování vrácených hodnot.

Dalším způsobem přístupu k prostředkům prostřednictvím kódu programu je přístup k obsahu Resources vlastnosti jako slovníku. Slovníky prostředků se používají k přidání nových prostředků do existujících kolekcí, kontrola, jestli daný název klíče už kolekce používá, a další operace. Pokud píšete aplikaci WPF zcela v kódu, můžete také vytvořit celou kolekci v kódu, přiřadit k ní prostředky. Kolekci lze pak přiřadit k Resources vlastnosti elementu. Toto je popsáno v další části.

V libovolné kolekci Resources můžete indexovat pomocí konkrétního klíče jako indexu. Prostředky, ke kterým se přistupuje tímto způsobem, nedodržují normální pravidla modulu runtime řešení prostředků. K této konkrétní kolekci přistupujete jenom vy. Vyhledávání prostředků neprochází oborem prostředku do kořenového adresáře nebo aplikace, pokud nebyl v požadovaném klíči nalezen žádný platný objekt. Tento přístup ale může mít v některých případech výhody výkonu přesně proto, že rozsah hledání klíče je omezenější. Další informace o tom, jak pracovat se slovníkem prostředků přímo, najdete v ResourceDictionary třídě.

Vytváření prostředků pomocí kódu

Pokud chcete v kódu vytvořit celou aplikaci WPF, můžete také v kódu vytvořit všechny prostředky v této aplikaci. Chcete-li toho dosáhnout, vytvořte novou ResourceDictionary instanci a potom přidejte všechny prostředky do slovníku pomocí následných volání ResourceDictionary.Add. Potom přiřaďte vytvořenou ResourceDictionaryResources k nastavení vlastnosti u elementu, který je k dispozici v oboru stránky, nebo objektu Application.Resources. Můžete také zachovat ResourceDictionary jako samostatný objekt, aniž byste ho přidali do elementu. Pokud to ale uděláte, musíte k prostředkům v něm přistupovat pomocí klíče položky, jako by šlo o obecný slovník. Objekt ResourceDictionary , který není připojen k vlastnosti elementu Resources , neexistuje jako součást stromu elementu a nemá žádný obor ve vyhledávací sekvenci, kterou lze použít FindResource pomocí a souvisejících metod.

Použití objektů jako klíčů

Většina využití prostředků nastaví klíč prostředku na řetězec. Různé funkce WPF však záměrně používají typ objektu jako klíč místo řetězce. Schopnost mít prostředek být klíčován typem objektu se používá ve stylu WPF a podpora motivů. Styly a motivy, které se stanou výchozím nastavením pro jinak ne styledový ovládací prvek, jsou každou klávesou Type ovládacího prvku, na který se mají použít.

Klíčování podle typu poskytuje spolehlivý vyhledávací mechanismus, který funguje na výchozích instancích každého typu ovládacího prvku. Typ lze rozpoznat reflexí a použít pro stylování odvozených tříd, i když odvozený typ jinak nemá žádný výchozí styl. Klíč pro prostředek definovaný v jazyce XAML můžete zadat Type pomocí rozšíření značek x:Type. Podobná rozšíření existují pro jiné použití neřetězcených klíčů, které podporují funkce WPF, jako je ComponentResourceKey Markup Extension.

Další informace naleznete v tématu Styly, DataTemplates a implicitní klíče.

Viz také