Typkonverter und Markuperweiterungen für XAMLType Converters and Markup Extensions for XAML

Typkonverter und Markuperweiterung sind zwei Techniken, mit denen XAML-Typsysteme und XAML-Writer Objektdiagrammkomponenten generieren.Type converters and markup extensions are two techniques that XAML type systems and XAML writers use to generate object graph components. Obwohl sie einige gemeinsame Eigenschaften aufweisen, werden Typkonverter und Markuperweiterungen in einem XAML-Knotenstream unterschiedlich dargestellt.Although they share some characteristics, type converters and markup extensions are represented differently in a XAML node stream. In dieser Dokumentation werden Typkonverter, Markuperweiterungen und ähnliche Konstrukte manchmal zusammenfassend als Wertkonverter bezeichnet.In this documentation set, type converters, markup extensions, and similar constructs are sometimes collectively referred to as value converters.

WertkonverterValue Converters

In XAML werden Wertkonverter für verschiedene Szenarien verwendet.In XAML, value converters are used for various scenarios. Die folgende Liste enthält die verschiedenen Arten von Wertkonvertern im XAML:The following list shows the different types of value converters in XAML:

  • TypkonverterType converter

  • MarkuperweiterungMarkup extension

  • Werte-SerialisierungsprogrammValue serializer

  • Verwandte Klasse oder Unterstützungsklasse, die die Logik für eine XAML-Textsyntax bereitstelltRelated class or support class that provides the logic for a XAML text syntax

TypkonverterType Converters

In der Definition der .NET Framework-XAML-Dienste sind Typkonverter von der CLR- TypeConverter -Klasse abgeleitete Klassen.In the .NET Framework XAML Services definition, type converters are classes that derive from the CLR TypeConverter class. TypeConverterist eine Klasse, die sich im Microsoft .NET Framework befand, bevor XAML vorhanden war.TypeConverter is a class that was in the Microsoft .NET Framework before XAML existed. Der ursprüngliche Zweck bestand darin, Eigenschaften Fenster und ähnliche textbasierte Bearbeitungs Metaphern für IDE-Eigenschaften zu unterstützen.Its original purpose was to support property windows and similar text-based editing metaphors for IDE properties. Die Einführung von XAML in .NET Framework verwendet TypeConverter zum Konvertieren einer Textsyntax (wie sie in einem Attributwert oder XAML-Wertknoten zu finden ist) in ein Objekt.The introduction of XAML to .NET Framework uses TypeConverter to convert a text syntax (as found in an attribute value or a XAML value node) into an object. TypeConverter kann auch zum Serialisieren eines Objektwerts in Textsyntax verwendet werden.TypeConverter can also be used to serialize an object value to text syntax. TypeConverterwurde auch in früheren Framework-spezifischen XAML-Implementierungen in Windows Presentation Foundation (WPF) und Windows Communication Foundation (WCF) verwendet.TypeConverter was also used in previous framework-specific XAML implementations in Windows Presentation Foundation (WPF) and Windows Communication Foundation (WCF). Weitere Informationen zum TypeConverter in XAML finden Sie unter Type Converters for XAML Overviewverwendet.For more information about the TypeConverter in XAML, see Type Converters for XAML Overview.

MarkuperweiterungenMarkup Extensions

In der Implementierung der .NET Framework-XAML-Dienste sind Markuperweiterungen von der MarkupExtension -Klasse abgeleitete Klassen.In the .NET Framework XAML Services implementation, markup extensions are classes that derive from the MarkupExtension class. Markuperweiterungen sind ein Konzept, das in dieser Form aus der XAML-Sprache entstanden ist.Markup extensions are a concept that in this form is originated by the XAML language. Stellen Sie sich eine Markuperweiterung in etwa als eine erweiterbare Escapesequenz vor, die eine Dienstklasse aufruft, um ihre Logik bereitzustellen.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. Im Hinblick auf Markup erkennen XAML-Prozessoren universell eine Markuperweiterung anhand einer Textsequenz, die mit einer öffnenden geschweiften Klammer ({) in einer Textzeichenfolge beginnt.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.

Markuperweiterungen unterscheiden sich von Typkonvertern.Markup extensions differ from type converters. Typkonverter sind normalerweise Typen oder Membern zugeordnet.Type converters are typically associated with types or members. Sie werden aufgerufen, wenn bei der Erstellung eines Objektdiagramms oder einer Serialisierung eine Textsyntax gefunden wird, die solchen Entitäten zugeordnet ist.They are invoked when an object graph creation or a serialization encounters text syntax that is associated with those entities.

Markuperweiterungen sind einer einzelnen unterstützenden Dienstklasse zugeordnet, können aber für jeden Memberwert angewendet werden.Markup extensions are associated with a single supporting service class, but can be applied for any member value. (Allerdings können Sie die Markuperweiterung so implementieren, dass ihre Verwendung mithilfe von Dienstkontext bewusst auf bestimmte Member oder Zieltypen eingeschränkt wird.) Markuperweiterungen können die Zuordnung eines Typkonverters überschreiben.(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. Oder Sie können sie verwenden, um einen Attributwert für Member anzugeben, die eine Textsyntax andernfalls nicht unterstützen würden.Or you can use them to specify an attribute value for members that would not otherwise support a text syntax.

Weitere Informationen zu den Implementierungsmustern für Markuperweiterungen für XAML finden Sie unter Markup Extensions for XAML Overview.For more information about the markup extension implementation pattern for XAML, see Markup Extensions for XAML Overview.

Hinweis

Die Typen MarkupExtension und ValueSerializer befinden sich beide im System.Windows.Markup -Namespace und nicht im System.Xaml -Namespace.The MarkupExtension and ValueSerializer types are both in the System.Windows.Markup namespace and not in the System.Xaml namespace. Dies bedeutet nicht, dass diese Typen entweder für WPF-oder Windows Forms-Technologien spezifisch sind, die andernfalls CLR-Namespaces auffüllen, die Windowsdie Zeichenfolge enthalten.This does not imply that these types are specific to either the WPF or Windows Forms technologies that otherwise populate CLR namespaces that contain the string Windows. MarkupExtension und ValueSerializer befinden sich in der System.Xaml-Assembly und weisen keine spezifische Framework-Abhängigkeit auf.MarkupExtension and ValueSerializer are in the System.Xaml assembly and have no specific framework dependency. Diese Typen waren im CLR-Namespace für .NET Framework 3,0 vorhanden und verbleiben im CLR-Namespace in .NET Framework 4, um zu vermeiden, dass Verweise in vorhandenen WPF-Projekten unterbrochen werden.These types existed in the CLR namespace for .NET Framework 3.0 and remain in the CLR namespace in .NET Framework 4 to avoid breaking references in existing WPF projects. Weitere Informationen finden Sie unter Types Migrated from WPF to System.Xaml.For more information, see Types Migrated from WPF to System.Xaml.

Werte-SerialisierungsprogrammeValue Serializers

Ein ValueSerializer ist ein spezialisierter Typkonverter, der zum Konvertieren eines Objekts in eine Zeichenfolge optimiert ist.A ValueSerializer is a specialized type converter that is optimized for converting an object to a string. Ein ValueSerializer für XAML implementiert die ConvertFrom -Methode möglicherweise überhaupt nicht.A ValueSerializer for XAML might not implement the ConvertFrom method at all. Eine ValueSerializer -Implementierung ruft Dienste auf eine Weise auf, die einer TypeConverter -Implementierung gleicht.A ValueSerializer implementation obtains services in a manner that is like a TypeConverter implementation. Die virtuellen Methoden bieten einen Eingabe- context -Parameter.The virtual methods provide an input context parameter. Der context -Parameter ist vom Typ IValueSerializerContext, der von der IServiceProvider -Schnittstelle erbt und über eine GetService -Methode verfügt.The context parameter is of type IValueSerializerContext, which inherits from the IServiceProvider interface and has a GetService method.

Im XAML-Typsystem und für XAML-Writer-Implementierungen, die die Verarbeitung von XAML-Knotenschleifen für die Serialisierung verwenden, wird ein Wertkonverter, der einem Typ oder Member zugeordnet ist, durch seine eigene XamlType.ValueSerializer -Eigenschaft gemeldet.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. Die Bedeutung für XAML-Writer, die Serialisierungen durchführen, ist, dass wenn ein XamlType.TypeConverter und XamlType.ValueSerializer vorhanden sind, der Typkonverter für den Pfad zum Laden verwendet werden sollte und das Werte-Serialisierungsprogramm für den Pfad zum Speichern.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. Wenn XamlType.TypeConverter vorhanden ist, aber XamlType.ValueSerializer nullist, wird der Typkonverter auch für den Pfad zum Speichern verwendet.If XamlType.TypeConverter exists but XamlType.ValueSerializer is null, the type converter is also used for the save path.

Andere WertkonverterOther Value Converters

Ein Wertkonverter kann über die spezifischen Muster eines Typkonverters oder einer Markuperweiterungen hinaus erweitert werden.A value converter is extensible beyond the specific patterns of a type converter or a markup extension. Diese Anpassung erfordert jedoch auch die Neudefinition des XAML-Typsystem entsprechend der Bereitstellung durch .NET Framework-XAML-Dienste.However, this customization would also require the redefinition of the XAML type system as provided by .NET Framework XAML Services. Das vorhandene XAML-Typsystem verfügt über Darstellungen und Berichtssysteme für Typkonverter, Markuperweiterungen und Werte-Serialisierungsprogramme, jedoch nicht für benutzerdefinierte Formen der Wertkonvertierung.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. Wenn Sie benutzerdefinierte Wertkonverter erstellen möchten, verwenden Sie den XamlValueConverter<TConverterBase> -Typ.If you want to create custom value converters, use the XamlValueConverter<TConverterBase> type.

Typkonverter und Markuperweiterungen kombiniertType Converters and Markup Extensions in Combination

Markuperweiterungen und Typkonverter werden für verschiedene Situationen in XAML verwendet.Markup extensions and type converters are used for different situations in XAML. Obwohl der Kontext für die Verwendung von Markuperweiterungen verfügbar ist, wird das Typkonvertierungsverhalten von Eigenschaften, bei denen eine Markuperweiterung einen Wert bereitstellt, in der Regel nicht in den Implementierungen der Markuperweiterung überprüft.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. Mit anderen Worten, auch wenn eine Markuperweiterung eine Textzeichenfolge als ProvideValue -Ausgabe zurückgibt, wird das Typkonvertierungsverhalten für diese Zeichenfolge entsprechend der Anwendung auf eine spezifische Eigenschaft oder einen spezifischen Eigenschaftswerttyp nicht aufgerufen.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. Im Allgemeinen besteht der Zweck einer Markuperweiterung darin, eine Zeichenfolge zu verarbeiten und ein Objekt ohne Beteiligung eines Typkonverters zurückzugeben.Generally, the purpose of a markup extension is to process a string and return an object without any type converter involved.

Dienstkontext für einen WertkonverterService Context for a Value Converter

Wenn Sie einen Wertkonverter implementieren, benötigen Sie häufig Zugriff auf einen Kontext, in dem der Wertkonverter angewendet wird.When you implement a value converter, you often need access to a context in which the value converter is applied. Dieser Kontext wird als Dienstkontext bezeichnet.This context is known as the service context. Der Kontext kann Informationen wie z. B. den aktiven XAML-Schemakontext, den Zugriff auf das Typzuordnungssystem, das der XAML-Schemakontext und der XAML-Objektwriter bereitstellen, usw. enthalten.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. Weitere Informationen zu den für einen Wertkonverter verfügbaren Dienstkontexten sowie dazu, wie auf die Dienste zugegriffen wird, die ein Dienstkontext bereitstellen kann, finden Sie unter Service Contexts Available to Type Converters and Markup Extensions.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.

Siehe auchSee also