Typy konwerterów i rozszerzenia znaczników dla XAMLType Converters and Markup Extensions for XAML

Konwertery typów i rozszerzenia znaczników to dwie techniki używane przez systemy typu XAML i moduły zapisujące XAML do generowania składników grafu obiektów.Type converters and markup extensions are two techniques that XAML type systems and XAML writers use to generate object graph components. Chociaż korzystają one z pewnych cech, konwertery typów i rozszerzenia znaczników są reprezentowane inaczej w strumieniu węzła XAML.Although they share some characteristics, type converters and markup extensions are represented differently in a XAML node stream. W tym zestawie dokumentacji, konwertery typów, rozszerzenia znaczników i podobne konstrukcje są czasami określane jako konwertery wartości.In this documentation set, type converters, markup extensions, and similar constructs are sometimes collectively referred to as value converters.

Konwertery wartościValue Converters

W języku XAML konwertery wartości są używane w różnych scenariuszach.In XAML, value converters are used for various scenarios. Na poniższej liście przedstawiono różne typy konwerterów wartości w języku XAML:The following list shows the different types of value converters in XAML:

  • Konwerter typówType converter

  • Rozszerzenie znacznikówMarkup extension

  • Serializator wartościValue serializer

  • Klasa pokrewna lub pomoc techniczna, która udostępnia logikę składni tekstu XAMLRelated class or support class that provides the logic for a XAML text syntax

Konwertery typówType Converters

W definicji usług języka XAML w programie .NET, konwertery typów są klasami pochodnymi od TypeConverter klasy CLR.In .NET XAML Services definition, type converters are classes that derive from the CLR TypeConverter class. TypeConverter jest klasą, która była w środowisku .NET przed Existing XAML.TypeConverter is a class that was in the .NET before XAML existed. Pierwotnie miało to na celu obsługę okien właściwości i podobnych metafory edycji tekstowych na podstawie właściwości IDE.Its original purpose was to support property windows and similar text-based editing metaphors for IDE properties. Wprowadzenie języka XAML do programu .NET używa TypeConverter do konwersji składni tekstowej (jak znaleziono w atrybucie wartość lub węzeł wartości XAML) do obiektu.The introduction of XAML to .NET uses TypeConverter to convert a text syntax (as found in an attribute value or a XAML value node) into an object. TypeConverter można go również użyć do serializacji wartości Object na składnię tekstu.TypeConverter can also be used to serialize an object value to text syntax. TypeConverter został również użyty w poprzednich implementacjach języka XAML specyficznych dla platformy w Windows Presentation Foundation (WPF) i Windows Communication Foundation (WCF).TypeConverter was also used in previous framework-specific XAML implementations in Windows Presentation Foundation (WPF) and Windows Communication Foundation (WCF). Aby uzyskać więcej informacji na temat TypeConverter języka XAML, zobacz Typy konwerterów dla języka XAML — Omówienie.For more information about the TypeConverter in XAML, see Type Converters for XAML Overview.

Rozszerzenia struktury znacznikówMarkup Extensions

W implementacji usług języka XAML platformy .NET rozszerzenia znaczników są klasami pochodnymi od MarkupExtension klasy.In .NET XAML Services implementation, markup extensions are classes that derive from the MarkupExtension class. Rozszerzenia znaczników to koncepcja, w tym formularzu pochodzi od języka XAML.Markup extensions are a concept that in this form is originated by the XAML language. Można traktować rozszerzenie znaczników jako takie jak rozszerzalna sekwencja ucieczki, która wywołuje klasę usługi w celu zapewnienia jej logiki.You can think of a markup extension as being something like an extensible escape sequence that calls into a service class to provide its logic. W odniesieniu do znaczników, procesory XAML rozpoznają uniwersalnie rozszerzenie znaczników przez sekwencję tekstu rozpoczynającą się od otwierającego nawiasu klamrowego ({) w ciągu tekstowym.In terms of markup, XAML processors universally recognize a markup extension by a text sequence that starts with an opening brace ({) in a text string.

Rozszerzenia znaczników różnią się od konwerterów typów.Markup extensions differ from type converters. Konwertery typów są zwykle skojarzone z typami lub elementami członkowskimi.Type converters are typically associated with types or members. Są wywoływane, gdy utworzenie grafu obiektów lub Serializacja napotka składnię tekstu, która jest skojarzona z tymi jednostkami.They are invoked when an object graph creation or a serialization encounters text syntax that is associated with those entities.

Rozszerzenia znaczników są skojarzone z pojedynczą klasą usługi pomocniczej, ale mogą być stosowane dla dowolnej wartości elementu członkowskiego.Markup extensions are associated with a single supporting service class, but can be applied for any member value. (Jednak można zaimplementować rozszerzenie znacznika, aby celowo ograniczyć jego użycie do określonych elementów członkowskich lub typów docelowych przy użyciu kontekstu usługi). Rozszerzenia znaczników mogą przesłaniać skojarzenie konwertera typów.(However, you can implement your markup extension to deliberately restrict its use to certain members or destination types, by using service context.) Markup extensions can override a type converter association. Można też użyć ich do określenia wartości atrybutu dla elementów członkowskich, które w przeciwnym razie nie obsługują składni tekstu.Or you can use them to specify an attribute value for members that would not otherwise support a text syntax.

Aby uzyskać więcej informacji na temat wzorca implementacji rozszerzenia znaczników dla języka XAML, zobacz rozszerzenia znaczników dla języka XAML — Omówienie.For more information about the markup extension implementation pattern for XAML, see Markup Extensions for XAML Overview.

Serializatory wartościValue Serializers

A ValueSerializer to wyspecjalizowany konwerter typów, który jest zoptymalizowany pod kątem konwersji obiektu na ciąg.A ValueSerializer is a specialized type converter that is optimized for converting an object to a string. W ValueSerializer przypadku języka XAML nie można zaimplementować ConvertFrom metody w ogóle.A ValueSerializer for XAML might not implement the ConvertFrom method at all. ValueSerializerImplementacja uzyskuje usługi w sposób, który jest jak TypeConverter implementacja.A ValueSerializer implementation obtains services in a manner that is like a TypeConverter implementation. Metody wirtualne zapewniają parametr wejściowy context .The virtual methods provide an input context parameter. contextParametr jest typu IValueSerializerContext , który dziedziczy z IServiceProvider interfejsu i ma GetService metodę.The context parameter is of type IValueSerializerContext, which inherits from the IServiceProvider interface and has a GetService method.

W systemie typu XAML i dla implementacji składnika zapisywania języka XAML, które używają przetwarzania pętli węzłów języka XAML do serializacji, konwerter wartości, który jest skojarzony z typem lub składową, jest raportowany za pomocą własnej XamlType.ValueSerializer właściwości.In the XAML type system and for XAML writer implementations that use XAML node loop processing for serialization, a value converter that is associated with a type or member is reported by its own XamlType.ValueSerializer property. Znaczenie dla autorów XAML, które wykonują serializacji, jest to, że jeśli XamlType.TypeConverter i XamlType.ValueSerializer istnieje, konwerter typu powinien być używany dla ścieżki ładowania i dla ścieżki zapisu należy użyć serializatora wartości.The meaning to XAML writers that perform serialization is that if a XamlType.TypeConverter and XamlType.ValueSerializer exist, the type converter should be used for the load path and the value serializer should be used for the save path. Jeśli XamlType.TypeConverter istnieje XamlType.ValueSerializer , ale jest null , konwerter typu jest również używany dla ścieżki zapisu.If XamlType.TypeConverter exists but XamlType.ValueSerializer is null, the type converter is also used for the save path.

Inne konwertery wartościOther Value Converters

Konwerter wartości jest rozszerzalny poza określonymi wzorcami konwertera typów lub rozszerzenia znaczników.A value converter is extensible beyond the specific patterns of a type converter or a markup extension. Jednak takie dostosowanie wymaga również ponownej definicji systemu typów XAML zgodnie z usługami .NET XAML.However, this customization would also require the redefinition of the XAML type system as provided by .NET XAML Services. Istniejący system typów XAML ma reprezentacje i systemy raportowania dla konwerterów typów, rozszerzeń znaczników i serializatorów wartości, ale nie dla niestandardowych formularzy konwersji wartości.The existing XAML type system has representations and reporting systems for type converters, markup extensions, and value serializers, but not for custom forms of value conversion. Jeśli chcesz utworzyć niestandardowe konwertery wartości, użyj XamlValueConverter<TConverterBase> typu.If you want to create custom value converters, use the XamlValueConverter<TConverterBase> type.

Konwertery typów i rozszerzenia znaczników w połączeniuType Converters and Markup Extensions in Combination

Rozszerzenia znaczników i konwertery typów są używane w różnych sytuacjach języka XAML.Markup extensions and type converters are used for different situations in XAML. Chociaż kontekst jest dostępny dla użycia rozszerzenia znaczników, zachowanie konwersji typu dla właściwości, w których rozszerzenie znacznika zapewnia wartość, zazwyczaj nie jest zaznaczone w implementacjach rozszerzenia znaczników.Although context is available for markup extension usages, type conversion behavior of properties where a markup extension provides a value is generally is not checked in the markup extension implementations. Innymi słowy, nawet jeśli rozszerzenie znaczników zwraca ciąg tekstowy jako ProvideValue dane wyjściowe, zachowanie konwersji typu dla tego ciągu zgodnie z określoną właściwością lub typem wartości właściwości nie jest wywoływane.In other words, even if a markup extension returns a text string as its ProvideValue output, type conversion behavior on that string as applied to a specific property or property value type is not invoked. Ogólnie rzecz biorąc, przeznaczenie rozszerzenia znacznika ma przetwarzać ciąg i zwracać obiekt bez żadnego z nich.Generally, the purpose of a markup extension is to process a string and return an object without any type converter involved.

Kontekst usługi dla konwertera wartościService Context for a Value Converter

Podczas implementowania konwertera wartości często potrzebny jest dostęp do kontekstu, w którym jest stosowany konwerter wartości.When you implement a value converter, you often need access to a context in which the value converter is applied. Ten kontekst jest znany jako kontekst usługi.This context is known as the service context. Kontekst usługi może zawierać informacje takie jak kontekst aktywnego schematu XAML, dostęp do systemu mapowania typów, który jest udostępniany przez kontekst schematu XAML i składnik zapisywania obiektów XAML i tak dalej.The service context might include information such as the active XAML schema context, access to the type-mapping system that the XAML schema context and XAML object writer provide, and so on. Aby uzyskać więcej informacji na temat kontekstów usługi dostępnych dla konwertera wartości i sposobu uzyskiwania dostępu do usług, które mogą być udostępniane przez kontekst usługi, zobacz konteksty usługi dostępne dla typów konwerterów i rozszerzeń znaczników.For more information about the service contexts available for a value converter and how to access the services that a service context might provide, see Service Contexts Available to Type Converters and Markup Extensions.

Zobacz takżeSee also