Megosztás a következőn keresztül:


Erőforrások kódban

Ez az áttekintés arra összpontosít, hogy a Windows Presentation Foundation (WPF) erőforrásai hogyan érhetők el vagy hozhatók létre kóddal az XAML szintaxis helyett. Az XAML-szintaxis szempontjából az általános erőforrás-használatról és az erőforrásokról további információt az XAML-erőforrások áttekintésecímű témakörben talál.

Erőforrások elérése kódból

Az XAML által definiált erőforrásokat azonosító kulcsok adott erőforrások lekérésére is használhatók, ha kódban kéri le az erőforrást. Az erőforrás kódból való lekérésének legegyszerűbb módja, ha meghívja az FindResource vagy a TryFindResource metódust az alkalmazás keretrendszerszintű objektumaiból. A metódusok közötti viselkedésbeli különbség az, ami akkor történik, ha a kért kulcs nem található. FindResource kivételt eredményez. TryFindResource nem fog kivételt emelni, de null-et ad vissza. Minden metódus bemeneti paraméterként használja az erőforráskulcsot, és egy lazán beírt objektumot ad vissza.

Az erőforráskulcsok általában sztringek, de alkalmi nem sztringhasználatok. A kóderőforrás-feloldás keresési logikája megegyezik a dinamikus erőforrás-referencia XAML-esetével. Az erőforrások keresése a hívóelemből indul ki, majd a logikai fa szülőelemei között folytatódik. A keresés szükség esetén tovább folytatódik az alkalmazáserőforrások, a témák és a rendszererőforrások között. Az erőforrások kódkérelmének megfelelően figyelembe kell vennie az erőforrások futásidőben történt módosításait.

Az alábbi példakód egy Click eseménykezelőt mutat be, amely kulcs alapján keres egy erőforrást, és a visszaadott érték használatával beállít egy tulajdonságot.

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

Az erőforrás-referencia hozzárendelésének másik módszere a SetResourceReference. Ez a módszer két paramétert használ: az erőforrás kulcsát és egy adott függőségi tulajdonság azonosítóját, amely azon az elempéldányon található, amelyhez az erőforrásértéket hozzá kell rendelni. Funkcionálisan ez a módszer ugyanaz, és előnye, hogy nem igényel visszatérési értékeket.

Az erőforrások programozott elérésének egy másik módja a Resources tulajdonság tartalmának szótárként való elérése. Az erőforrás-szótárak új erőforrások meglévő gyűjteményekhez való hozzáadására szolgálnak. Ellenőrizze, hogy a gyűjtemény már használ-e egy adott kulcsnevet, valamint egyéb műveleteket. Ha egy WPF-alkalmazást teljes egészében kódban ír, a teljes gyűjteményt kódban is létrehozhatja, erőforrásokat rendelhet hozzá. A gyűjtemény ezután hozzárendelhető egy elem Resources tulajdonságához. Ezt a következő szakaszban ismertetjük.

Egy adott Resources gyűjteményen belül indexelhet egy adott kulcsot indexként. Az így elért erőforrások nem követik az erőforrásfeloldás normál futtatókörnyezeti szabályait. Csak az adott gyűjteményhez fér hozzá. Az erőforrás-keresés nem lépi át az erőforrás hatókörét a gyökérre vagy az alkalmazásra, ha a kért kulcson nem található érvényes objektum. Ennek a megközelítésnek azonban bizonyos esetekben teljesítménybeli előnyei lehetnek, mivel a kulcs keresésének hatóköre korlátozottabb. Az erőforrás-szótárak közvetlen használatáról a ResourceDictionary osztályban talál további információt.

Erőforrások létrehozása kóddal

Ha egy teljes WPF-alkalmazást szeretne kódban létrehozni, akkor érdemes lehet az adott alkalmazás összes erőforrását kódban létrehozni. Ennek eléréséhez hozzon létre egy új ResourceDictionary-példányt, majd adja hozzá az összes erőforrást a szótárhoz a ResourceDictionary.Addegymást követő hívásokkal. Ezután rendelje hozzá a létrehozott ResourceDictionary-at, hogy beállítsa az Resources tulajdonságot egy lap hatókörében lévő elemen vagy a Application.Resources-n. A ResourceDictionary önálló objektumként is fenntarthatja anélkül, hogy hozzáadná egy elemhez. Ha azonban ezt teszi, a benne lévő erőforrásokat elemkulcs alapján kell elérnie, mintha általános szótár lenne. Az elemhez nem csatolt ResourceDictionaryResources tulajdonság nem létezik az elemfa részeként, és nem rendelkezik hatókörrel olyan keresési sorrendben, amelyet FindResource és kapcsolódó metódusok használhatnak.

Objektumok használata kulcsként

A legtöbb erőforrás-használat sztringként állítja be az erőforrás kulcsát. A különböző WPF-funkciók azonban szándékosan használják az objektumtípust kulcsként sztring helyett. A WPF stílus és tématámogatás használja az erőforrás objektumtípus alapján történő kulcsolásának képességét. Az egyébként stílus nélküli vezérlőelemek alapértelmezett stílusai és témái mindegyikét a vezérlő Type kulcsa alapján azonosítják, amelyre alkalmazniuk szükséges.

A típus szerinti kulcsok megbízható keresési mechanizmust biztosítanak, amely minden vezérlőtípus alapértelmezett példányán működik. A típus tükröződéssel észlelhető, és a származtatott osztályok stílusának meghatározására is használható, annak ellenére, hogy a származtatott típus egyébként nem rendelkezik alapértelmezett stílussal. Az XAML-ben definiált erőforráshoz Type kulcsot a x:Type Markup Extensionhasználatával adhatja meg. Hasonló kiterjesztések léteznek a WPF-funkciókat támogató egyéb nem sztring alapú kulcshasználatokhoz, például ComponentResourceKey jelölő kiterjesztés.

További információért lásd: Stílusok, DataTemplates és implicit kulcsok.

Lásd még