.NET Framework 3.5 と .NET Framework 3.0 では、Windows Presentation Foundation (WPF) と Windows Workflow Foundation の両方に XAML 言語実装が含まれていました。 WPF XAML 実装の拡張性を提供するパブリック型の多くは、WindowsBase、PresentationCore、PresentationFramework アセンブリに存在しました。 同様に、Windows Workflow Foundation XAML の拡張性を提供するパブリック型が System.Workflow.ComponentModel アセンブリに存在していました。 .NET Framework 4 では、XAML 関連の型の一部が System.Xaml アセンブリに移行されました。 XAML 言語サービスの一般的な .NET Framework 実装では、最初は特定のフレームワークの XAML 実装によって定義されていたが、現在は .NET Framework 4 XAML 言語サポート全体の一部である多くの XAML 拡張シナリオが可能になります。 この記事では、移行された種類の一覧を示し、移行に関連する問題について説明します。
アセンブリと名前空間
.NET Framework 3.5 および .NET Framework 3.0 では、WPF が XAML をサポートするために実装した型は、通常、 System.Windows.Markup 名前空間に含まれています。 これらの型のほとんどは、WindowsBase アセンブリに含まれています。
.NET Framework 4 には、新しい System.Xaml 名前空間と新しい System.Xaml アセンブリがあります。 WPF XAML 用に最初に実装された型の多くは、XAML の実装に対する拡張ポイントまたはサービスとして提供されるようになりました。 より一般的なシナリオで使用できるようにする一環として、型は元の WPF アセンブリから System.Xaml アセンブリに型転送されます。 これにより、他のフレームワーク (WPF や Windows Workflow Foundation など) のアセンブリを含めなくても、XAML 拡張機能のシナリオが可能になります。
移行された型の場合、ほとんどの型は System.Windows.Markup 名前空間に残ります。 これは、ファイルごとに既存の実装での CLR 名前空間マッピングの中断を回避するために部分的に行われました。 その結果、.NET Framework 4 の System.Windows.Markup 名前空間には、一般的な XAML 言語サポート型 (System.Xaml アセンブリから) と WPF XAML 実装に固有の型 (WindowsBase およびその他の WPF アセンブリから) が混在しています。 System.Xaml に移行されたが、以前は WPF アセンブリに存在していた型には、WPF アセンブリのバージョン 4 で型転送がサポートされています。
ワークフロー XAML サポートの種類
Windows Workflow Foundation では XAML サポート型も提供されていましたが、多くの場合、これらは同等の WPF と同じ短い名前を持っていました。 Windows Workflow Foundation XAML サポートの種類の一覧を次に示します。
これらのサポートの種類は、.NET Framework 4 の Windows Workflow Foundation アセンブリに引き続き存在し、特定の Windows Workflow Foundation アプリケーションで引き続き使用できます。ただし、Windows Workflow Foundation を使用しないアプリケーションやフレームワークでは参照しないでください。
MarkupExtension
.NET Framework 3.5 および .NET Framework 3.0 では、WPF の MarkupExtension クラスは WindowsBase アセンブリに含まれています。 System.Workflow.ComponentModel アセンブリには、Windows Workflow Foundation の並列クラス ( MarkupExtension) が存在します。 .NET Framework 4 では、 MarkupExtension クラスは System.Xaml アセンブリに移行されます。 .NET Framework 4 では、 MarkupExtension は、特定のフレームワークに基づくものだけでなく、.NET XAML サービスを使用するすべての XAML 拡張シナリオを対象としています。 可能であれば、フレームワーク内の特定のフレームワークまたはユーザー コードも、XAML 拡張機能の MarkupExtension クラスに基づいて構築する必要があります。
MarkupExtension サポート サービス クラス
.NET Framework 3.5 および .NET Framework 3.0 for WPF では、XAML での型/プロパティの使用をサポートするために、 MarkupExtension 実装者と TypeConverter 実装で使用できるいくつかのサービスが提供されました。 これらのサービスは次のとおりです。
注
マークアップ拡張機能に関連する .NET Framework 3.5 のもう 1 つのサービスは、 IReceiveMarkupExtension インターフェイスです。
IReceiveMarkupExtension は移行されておらず、.NET Framework 4 の [Obsolete]
としてマークされています。 以前に IReceiveMarkupExtension を使用したシナリオでは、代わりに属性付きコールバック XamlSetMarkupExtensionAttribute 使用する必要があります。
AcceptedMarkupExtensionExpressionTypeAttribute も [Obsolete]
マークされます。
XAML 言語機能
WPF 用のいくつかの XAML 言語機能とコンポーネントは、以前は PresentationFramework アセンブリに存在しました。 これらは、XAML マークアップでマークアップ拡張機能の使用法を公開するための MarkupExtension サブクラスとして実装されました。 .NET Framework 4 では、これらは System.Xaml アセンブリに存在するため、WPF アセンブリを含まないプロジェクトでこれらの XAML 言語レベルの機能を使用できます。 WPF では、.NET Framework 4 アプリケーションに対してこれらの同じ実装が使用されます。 このトピックに記載されている他のケースと同様に、サポートされる型は引き続き System.Windows.Markup 名前空間に存在し、以前の参照を中断しないようにします。
次の表に、System.Xaml で定義されている XAML 機能サポート クラスの一覧を示します。
XAML 言語機能 | 使用方法 |
---|---|
ArrayExtension | <x:Array ...> |
NullExtension | {x:Null} |
StaticExtension | {x:Static ...} |
TypeExtension | {x:Type ...} |
System.Xaml には特定のサポート クラスがない場合がありますが、XAML 言語の言語機能を処理するための一般的なロジックは、System.Xaml とその実装された XAML リーダーと XAML ライターに存在するようになりました。 たとえば、 x:TypeArguments
は、System.Xaml 実装から XAML リーダーと XAML ライターによって処理される属性です。XAML ノード ストリームで記述したり、既定の (CLR ベースの) XAML スキーマ コンテキストで処理したり、XAML 型システム表現を持つ属性を指定したりできます。 XAML のリファレンス ドキュメントの詳細については、「 XAML サービス」を参照してください。
ValueSerializer およびサポート クラス
ValueSerializer クラスは、文字列への型変換をサポートします。特に、シリアル化で出力に複数のモードまたはノードが必要になる可能性がある XAML シリアル化の場合に使用できます。 .NET Framework 3.5 および .NET Framework 3.0 では、WPF の ValueSerializer は WindowsBase アセンブリに含まれています。 .NET Framework 4 では、 ValueSerializer クラスは System.Xaml にあり、WPF 上に構築されるクラスだけでなく、任意の XAML 拡張機能シナリオを対象としています。 IValueSerializerContext (サポート サービス) と DateTimeValueSerializer (特定のサブクラス) も System.Xaml に移行されます。
XAML-Related 属性
WPF XAML には、XAML の動作について何かを示すために CLR 型に適用できるいくつかの属性が含まれていました。 .NET Framework 3.5 および .NET Framework 3.0 の WPF アセンブリに存在していた属性の一覧を次に示します。 これらの属性は、.NET Framework 4 の System.Xaml に移行されます。
その他のクラス
IComponentConnector インターフェイスは、.NET Framework 3.5 および .NET Framework 3.0 の WindowsBase に存在しますが、.NET Framework 4 の System.Xaml に存在します。 IComponentConnector は、主にツールのサポートと XAML マークアップ コンパイラを対象としています。
INameScope インターフェイスは、.NET Framework 3.5 および .NET Framework 3.0 の WindowsBase に存在しますが、.NET Framework 4 の System.Xaml に存在します。 INameScope は、XAML 名前スコープの基本的な操作を定義します。
WPF および System.Xaml に存在する共有名を持つ XAML 関連のクラス
次のクラスは、.NET Framework 4 の WPF アセンブリと System.Xaml アセンブリの両方に存在します。
XamlReader
XamlWriter
XamlParseException
WPF の実装は、 System.Windows.Markup 名前空間と PresentationFramework アセンブリにあります。 System.Xaml の実装は、 System.Xaml 名前空間にあります。 WPF 型を使用している場合、または WPF 型から派生している場合は、通常、System.Xaml の実装ではなく、 XamlReader と XamlWriter の WPF 実装を使用する必要があります。 詳細については、「 System.Windows.Markup.XamlReader と System.Windows.Markup.XamlWriterの解説」を参照してください。
WPF アセンブリと System.Xaml の両方への参照を含め、System.Windows.Markup名前空間とSystem.Xaml名前空間の両方に対してinclude
ステートメントを使用している場合は、あいまいさのない型を解決するために、これらの API の呼び出しを完全に修飾する必要がある場合があります。
.NET Desktop feedback