XAML の型コンバーターおよびマークアップ拡張機能Type Converters and Markup Extensions for XAML

型コンバーターとマークアップ拡張機能は、XAML 型システムと XAML ライターが、オブジェクト グラフ コンポーネントを生成するために使用する 2 つの手法です。Type converters and markup extensions are two techniques that XAML type systems and XAML writers use to generate object graph components. 型コンバーターとマークアップ拡張機能は、一部の特性を共有しますが、XAML ノード ストリームでは異なる方法で表現されます。Although they share some characteristics, type converters and markup extensions are represented differently in a XAML node stream. このドキュメント セットでは、型コンバーター、マークアップ拡張機能、およびこれに類似したコンストラクトを、値コンバーターと総称することがあります。In this documentation set, type converters, markup extensions, and similar constructs are sometimes collectively referred to as value converters.

値コンバーターValue Converters

XAML では、さまざまなシナリオで値コンバーターが使用されます。In XAML, value converters are used for various scenarios. XAML におけるさまざまな種類の値コンバーターは次のとおりです。The following list shows the different types of value converters in XAML:

  • 型コンバーターType converter

  • マークアップ拡張機能Markup extension

  • 値シリアライザーValue serializer

  • XAML テキスト構文のロジックを提供する関連クラスまたはサポート クラスRelated class or support class that provides the logic for a XAML text syntax

型コンバーターType Converters

.NET Framework XAML サービスの定義では、型コンバーターは CLR の TypeConverter クラスから派生したクラスです。In the .NET Framework XAML Services definition, type converters are classes that derive from the CLR TypeConverter class. TypeConverter XAML が導入される前に、Microsoft .NET Framework にあったクラスです。TypeConverter is a class that was in the Microsoft .NET Framework before XAML existed. 当初の目的は、IDE プロパティのプロパティウィンドウと同様のテキストベースの編集メタファをサポートすることでした。Its original purpose was to support property windows and similar text-based editing metaphors for IDE properties. XAML への .NET Framework の導入では、TypeConverter を使用して、テキスト構文 (属性値または XAML 値ノードに含まれる) をオブジェクトに変換します。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 オブジェクトの値をテキスト構文にシリアル化にも使用できます。TypeConverter can also be used to serialize an object value to text syntax. TypeConverter でも Windows Presentation Foundation (WPF) や Windows Communication Foundation (WCF) で以前のフレームワーク固有 XAML 実装で使用されていました。TypeConverter was also used in previous framework-specific XAML implementations in Windows Presentation Foundation (WPF) and Windows Communication Foundation (WCF). XAML の TypeConverter の詳細については、「XAML の型コンバーターの概要 といった以前のフレームワーク固有の XAML 実装でも使用されていました。For more information about the TypeConverter in XAML, see Type Converters for XAML Overview.

マークアップ拡張機能Markup Extensions

.NET Framework XAML サービスの実装では、マークアップ拡張機能は MarkupExtension クラスから派生したクラスです。In the .NET Framework XAML Services implementation, markup extensions are classes that derive from the MarkupExtension class. この形式のマークアップ拡張機能は、XAML 言語で考案された概念です。Markup extensions are a concept that in this form is originated by the XAML language. マークアップ拡張機能は、サービス クラスを呼び出してロジックを提供する、拡張性を持ったエスケープ シーケンスのようなものと考えることができます。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. マークアップの観点からすると、XAML プロセッサは、テキスト文字列内の左中かっこ ({) で始まるテキスト シーケンスによってマークアップ拡張機能を汎用的に認識します。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.

マークアップ拡張機能は、型コンバーターとは異なります。Markup extensions differ from type converters. 型コンバーターは、通常、型またはメンバーに関連付けられ、Type converters are typically associated with types or members. オブジェクト グラフの作成またはシリアル化においてそれらのエンティティに関連付けられたテキスト構文が検出されると呼び出されます。They are invoked when an object graph creation or a serialization encounters text syntax that is associated with those entities.

マークアップ拡張機能は、単一のサポート サービス クラスに関連付けられますが、任意のメンバー値に適用できます。Markup extensions are associated with a single supporting service class, but can be applied for any member value. (ただし、マークアップ拡張機能の実装では、サービス コンテキストを使用することにより、その用途を特定のメンバーまたは変換先の型に意図的に制限することもできます。)マークアップ拡張機能は、型コンバーターの関連付けをオーバーライドできます。(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. または、テキスト構文をサポートしないメンバーの属性値を指定するためにマークアップ拡張機能を使用することもできます。Or you can use them to specify an attribute value for members that would not otherwise support a text syntax.

XAML でのマークアップ拡張機能の実装パターンの詳細については、「XAML のマークアップ拡張機能の概要」を参照してください。For more information about the markup extension implementation pattern for XAML, see Markup Extensions for XAML Overview.

注意

MarkupExtension 型と ValueSerializer 型はどちらも、 System.Windows.Markup 名前空間ではなく、 System.Xaml 名前空間にあります。The MarkupExtension and ValueSerializer types are both in the System.Windows.Markup namespace and not in the System.Xaml namespace. これは、これらの型が、文字列Windowsを含む CLR 名前空間に特に設定されていない WPF または Windows フォームテクノロジに固有であるという意味ではありません。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. MarkupExtensionValueSerializer は System.Xaml アセンブリにあり、特定のフレームワークとの依存関係はありません。MarkupExtension and ValueSerializer are in the System.Xaml assembly and have no specific framework dependency. これらの型は .NET Framework 3.0 の CLR 名前空間に存在し、.NET Framework 4 の CLR 名前空間に残っているので、既存の WPF プロジェクトでの参照の中断を回避できます。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. 詳細については、「 Types Migrated from WPF to System.Xaml」を参照してください。For more information, see Types Migrated from WPF to System.Xaml.

値シリアライザーValue Serializers

ValueSerializer は、オブジェクトを文字列に変換するために最適化された特殊な型コンバーターです。A ValueSerializer is a specialized type converter that is optimized for converting an object to a string. XAML の ValueSerializer は、 ConvertFrom メソッドを一切実装しません。A ValueSerializer for XAML might not implement the ConvertFrom method at all. ValueSerializer 実装は、 TypeConverter 実装と同様の方法でサービスを取得しますA ValueSerializer implementation obtains services in a manner that is like a TypeConverter implementation. 仮想メソッドは入力 context パラメーターを提供しています。The virtual methods provide an input context parameter. context パラメーターの型は IValueSerializerContextであり、 IServiceProvider インターフェイスを継承し、 GetService メソッドを持ちます。The context parameter is of type IValueSerializerContext, which inherits from the IServiceProvider interface and has a GetService method.

XAML 型システムと、シリアル化のために XAML ノード ループ処理を使用する XAML ライターの実装では、型またはメンバーに関連付けられた値コンバーターは、独自の XamlType.ValueSerializer プロパティによって報告されます。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. シリアル化を実行する XAML ライターにとっては、 XamlType.TypeConverterXamlType.ValueSerializer が存在する場合には、読み込みパス用に型コンバーターを使用し、保存パス用に値シリアライザーを使用する必要があるということを意味しています。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. XamlType.TypeConverter は存在するものの、 XamlType.ValueSerializernullの場合は、保存パス用にも型コンバーターを使用します。If XamlType.TypeConverter exists but XamlType.ValueSerializer is null, the type converter is also used for the save path.

その他の値コンバーターOther Value Converters

値コンバーターは、型コンバーターまたはマークアップ拡張機能の特定のパターンを超えて拡張できます。A value converter is extensible beyond the specific patterns of a type converter or a markup extension. ただし、このカスタマイズを行うには、.NET Framework XAML サービスによって提供される XAML 型システムも再定義する必要があります。However, this customization would also require the redefinition of the XAML type system as provided by .NET Framework XAML Services. 既存の XAML 型システムには、型コンバーター、マークアップ拡張機能、および値シリアライザー向けの表現とレポート システムがありますが、値変換のカスタム形式向けの表現とレポート システムはありません。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. カスタム値コンバーターを作成する場合は、 XamlValueConverter<TConverterBase> 型を使用します。If you want to create custom value converters, use the XamlValueConverter<TConverterBase> type.

型コンバーターとマークアップ拡張機能の組み合わせType Converters and Markup Extensions in Combination

マークアップ拡張機能と型コンバーターは、XAML の異なる状況で使用されます。Markup extensions and type converters are used for different situations in XAML. マークアップ拡張機能の使用時にはコンテキストを利用できますが、マークアップ拡張機能が値を提供するプロパティの型変換動作は一般にマークアップ拡張機能の実装ではチェックされません。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. つまり、マークアップ拡張機能が ProvideValue 出力としてテキスト文字列を返す場合でも、特定のプロパティまたはプロパティ値型に適用される、その文字列に対する型変換動作は呼び出されません。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. 一般に、マークアップ拡張機能の目的は、型コンバーターを呼び出さずに文字列を処理してオブジェクトを返すことです。Generally, the purpose of a markup extension is to process a string and return an object without any type converter involved.

値コンバーターのサービス コンテキストService Context for a Value Converter

値コンバーターを実装する際には、通常、値コンバーターが適用されるコンテキストにアクセスする必要があります。When you implement a value converter, you often need access to a context in which the value converter is applied. このコンテキストは、サービス コンテキストと呼ばれます。This context is known as the service context. サービス コンテキストには、アクティブな XAML スキーマ コンテキスト、XAML スキーマ コンテキストや XAML オブジェクト ライターが提供する型マッピング システムへのアクセスなどの情報が含まれます。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. 値コンバーターで使用可能なサービス コンテキストとサービス コンテキストが提供するサービスへのアクセス方法の詳細については、「型コンバーターおよびマークアップ拡張機能で使用できるサービス コンテキスト」を参照してください。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.

関連項目See also