Převaděče typů a rozšíření značek pro jazyk XAML

Převaděče typů a rozšíření značek jsou dvě techniky, které systémy typů XAML a zapisovače XAML používají ke generování komponent grafu objektů. Přestože sdílejí některé vlastnosti, převaděče typů a rozšíření značek jsou v datovém proudu uzlu XAML reprezentovány odlišně. V této sadě dokumentace se převaděče typů, rozšíření značek a podobné konstrukce někdy souhrnně označují jako převaděče hodnot.

Převaděče hodnot

V jazyce XAML se převaděče hodnot používají pro různé scénáře. Následující seznam ukazuje různé typy převaděčů hodnot v jazyce XAML:

  • Převaděč typů

  • Rozšíření značek

  • Serializátor hodnot

  • Související třída nebo třída podpory, která poskytuje logiku pro syntaxi textu XAML

Převaděče typů

V definici služby .NET XAML jsou převaděče typů třídy odvozené od třídy CLR TypeConverter . TypeConverter je třída, která byla v .NET předtím, než xaml existoval. Jeho původním účelem bylo podporovat okna vlastností a podobné textové úpravy metafory pro vlastnosti IDE. Úvod XAML do .NET používá TypeConverter k převodu textové syntaxe (jak je nalezeno v hodnotě atributu nebo uzlu hodnoty XAML) na objekt. TypeConverter lze také použít k serializaci hodnoty objektu na text syntaxi. TypeConverter byl použit také v předchozích implementacích XAML specifických pro architekturu ve Windows Presentation Foundation (WPF) a Windows Communication Foundation (WCF). Další informace o kódu TypeConverter XAML naleznete v tématu Převaděče typů pro PŘEHLED XAML.

Rozšíření značek

V implementaci služby .NET XAML Services jsou rozšíření značek třídy odvozené od MarkupExtension třídy. Rozšíření značek jsou koncept, který v tomto formuláři pochází z jazyka XAML. Rozšíření značek si můžete představit jako rozšiřitelnou řídicí sekvenci, která volá třídu služby, aby poskytovala svou logiku. Z hlediska značek procesory XAML všeobecně rozpoznávají rozšíření značek podle textové sekvence, která začíná levou složenou závorkou ({) v textovém řetězci.

Rozšíření značek se liší od převaděčů typů. Převaděče typů jsou obvykle přidruženy k typům nebo členům. Jsou vyvolány při vytvoření grafu objektu nebo serializace narazí na textovou syntaxi, která je přidružena k těmto entitám.

Rozšíření značek jsou přidružená k jedné podpůrné třídě služby, ale lze ji použít pro libovolnou hodnotu člena. (Rozšíření značek však můžete implementovat tak, aby se záměrně omezilo na určité členy nebo cílové typy pomocí kontextu služby.) Rozšíření značek mohou přepsat přidružení převaděče typů. Nebo je můžete použít k určení hodnoty atributu pro členy, které jinak nepodporují syntaxi textu.

Další informace o modelu implementace rozšíření značek pro XAML naleznete v tématu Rozšíření značek pro PŘEHLED XAML.

Serializátory hodnot

A ValueSerializer je specializovaný převaděč typů, který je optimalizovaný pro převod objektu na řetězec. Jazyk ValueSerializer XAML nemusí vůbec implementovat metodu ConvertFrom . Implementace ValueSerializer získává služby způsobem, který se podobá implementaci TypeConverter . Virtuální metody poskytují vstupní context parametr. Parametr context je typu IValueSerializerContext, který dědí z IServiceProvider rozhraní a má metodu GetService .

V systému typů XAML a pro implementace zapisovače XAML, které používají zpracování smyčky uzlu XAML pro serializaci, je převaděč hodnot přidružený k typu nebo členu hlášen vlastní XamlType.ValueSerializer vlastností. Význam pro zapisovače XAML, které provádějí serializaci, je, že pokud existuje XamlType.TypeConverterXamlType.ValueSerializer a existuje, převaděč typů by měl být použit pro cestu načtení a hodnota serializátor by se měl použít pro cestu uložení. Pokud XamlType.TypeConverter existuje, ale XamlType.ValueSerializer je null, typ převaděč se také používá pro cestu pro uložení.

Převaděče jiných hodnot

Převaděč hodnot je rozšiřitelný mimo konkrétní vzory převaděče typů nebo rozšíření značek. Toto přizpůsobení by však také vyžadovalo redefinici systému typů XAML, který poskytuje služba .NET XAML Services. Stávající systém typů XAML obsahuje reprezentace a systémy generování sestav pro převaděče typů, rozšíření značek a serializátory hodnot, ale ne pro vlastní formy převodu hodnot. Pokud chcete vytvořit vlastní převaděče hodnot, použijte typ XamlValueConverter<TConverterBase> .

Převaděče typů a rozšíření značek v kombinaci

Rozšíření značek a převaděče typů se používají v různých situacích v JAZYCE XAML. Kontext je sice k dispozici pro použití rozšíření značek, ale chování převodu typů vlastností, ve kterých rozšíření značek poskytuje hodnotu, se obecně nekontroluje v implementacích rozšíření značek. Jinými slovy, i když rozšíření značek vrátí textový řetězec jako výstup ProvideValue , chování převodu typu u daného řetězce použitého na konkrétní vlastnost nebo typ hodnoty vlastnosti se nevyvolá. Obecně platí, že účelem rozšíření značek je zpracovat řetězec a vrátit objekt bez zapojení převaděče typů.

Kontext služby pro převaděč hodnot

Při implementaci převaděče hodnot často potřebujete přístup k kontextu, ve kterém je použit převaděč hodnot. Tento kontext se označuje jako kontext služby. Kontext služby může obsahovat informace, jako je aktivní kontext schématu XAML, přístup k systému mapování typů, který poskytuje kontext schématu XAML a zapisovač objektů XAML atd. Další informace o kontextech služeb dostupných pro převaděč hodnot a o tom, jak získat přístup ke službám, které může kontext služby poskytnout, naleznete v tématu Kontexty služby dostupné pro převaděče typů a rozšíření značek.

Viz také