Sdílet prostřednictvím


Převaděče typů a rozšíření značek pro 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, které jsou odvozeny z CLR TypeConverter třídy. TypeConverter je třída, která byla v .NET dříve, než existoval XAML. 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 se nachází v hodnotě atributu nebo uzlu hodnoty XAML) na objekt. TypeConverter lze také použít k serializaci hodnoty objektu na textovou syntaxi. TypeConverter byl také použit v předchozích implementacích XAML specifických pro architekturu ve Windows Presentation Foundation (WPF) a Windows Communication Foundation (WCF). Další informace o TypeConverter v XAML naleznete v tématu Převaděče typů pro XAML Přehled.

Rozšíření značek

V implementaci .NET XAML Services jsou rozšíření značek třídy, které jsou odvozeny z 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 vzoru implementace rozšíření značek pro XAML naleznete v tématu Rozšíření značek pro XAML Přehled.

Serializátory hodnot

ValueSerializer je specializovaný převaděč typů, který je optimalizovaný pro převod objektu na řetězec. ValueSerializer pro 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 rozhraní IServiceProvider a má GetService metodu.

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 XamlType.TypeConverter a XamlType.ValueSerializer existují, měl by být použit převaděč typů pro cestu načtení a serializátor hodnot by měl být použit pro cestu uložení. Pokud XamlType.TypeConverter existuje, ale XamlType.ValueSerializer je null, použije se pro cestu uložení také převaděč typů.

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 jeho ProvideValue výstupu, 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žby dostupné 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é