WPF から System.Xaml に移行した型
.NET Framework Version 3.5 および .NET Framework Version 3.0 では、Windows Presentation Foundation (WPF) と Windows Workflow Foundation の両方に XAML 言語の実装が含まれていました。 WPF XAML 実装に拡張性を与えていたパブリック型の多くは、WindowsBase、PresentationCore、および PresentationFramework アセンブリに存在していました。 同様に、Windows Workflow Foundation XAML に拡張性を与えていたパブリック型は System.Workflow.ComponentModel アセンブリにありました。 .NET Framework Version 4 では、XAML 関連の型の一部は System.Xaml アセンブリに移行されています。 XAML 言語サービスにおける一般的な .NET Framework 実装では、元は特定のフレームワークの XAML 実装によって定義されていて、今は全体的な .NET Framework 4 XAML 言語サポートの一部となっている、XAML 機能拡張シナリオの多くを使用できるようになりました。 このトピックでは、移行された型をリストすると共に、移行に伴う課題について説明します。
このトピックは、次のセクションで構成されています。
- アセンブリと名前空間
- MarkupExtension
- MarkupExtension をサポートするサービス クラス
- XAML 言語機能
- ValueSerializer とサポートされるクラス
- XAML 関連の属性
- その他のクラス
- WPF および System.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 名前空間には、(System.Xaml アセンブリの) 一般的な XAML 言語サポート型と、(WindowsBase およびその他の WPF アセンブリの) WPF の XAML 実装固有の型が混在しています。 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 アセンブリにありました。 Windows Workflow Foundation の Parallel クラス、MarkupExtension は、System.Workflow.ComponentModel アセンブリにありました。 .NET Framework 4 では、MarkupExtension クラスは System.Xaml アセンブリに移行されています。 .NET Framework 4 では、MarkupExtension は、特定のフレームワーク上に構築される XAML 機能拡張シナリオだけではなく、.NET Framework XAML サービスを使用する XAML 機能拡張シナリオを対象としています。特定のフレームワーク、またはフレームワーク内のユーザー コードも、可能な限り、XAML 機能拡張の MarkupExtension クラスに構築する必要があります。
MarkupExtension をサポートするサービス クラス
WPF 向けの .NET Framework 3.5 と .NET Framework 3.0 では、MarkupExtension の実装側および TypeConverter の実装において、XAML の型/プロパティの使用方法をサポートするために使用できるサービスがいくつか用意されています。 次に、これらのサービスの例を示します。
メモ |
---|
マークアップ拡張機能に関連する .NET Framework 3.5 のサービスには、IReceiveMarkupExtension インターフェイスもあります。IReceiveMarkupExtension は移行されておらず、.NET Framework 4 では [Obsolete] とマーク付けされています。以前に IReceiveMarkupExtension を使用していたシナリオは、代わりに XamlSetMarkupExtensionAttribute 属性付きコールバックを使用する必要があります。AcceptedMarkupExtensionExpressionTypeAttribute も [Obsolete] とマーク付けされています。 |
XAML 言語機能
以前の Presentation Framework アセンブリには、WPF 向けの XAML 言語機能およびコンポーネントがいくつかありました。 これらの機能やコンポーネントは MarkupExtension サブクラスとして実装されており、XAML マークアップのマークアップ拡張機能の使用方法を公開していました。 .NET Framework 4 では、これらは System.Xaml アセンブリにあるので、WPF アセンブリを含まないプロジェクトでもこれらの XAML 言語レベル機能を使用できます。 WPF では、これと同じ実装を .NET Framework 4 アプリケーションでも使用しています。 このトピックで示す他のケースと同様に、サポート型は System.Windows.Markup 名前空間に引き続き存在するので、以前の参照は破損されません。
次の表に、Syetem.Xaml で定義されている XAML 機能のサポート クラスを示します。
XAML 言語機能 |
使用方法 |
---|---|
<x:Array ...> |
|
{x:Null} |
|
{x:Static ...} |
|
{x:Type ...} |
System.Xaml には特定のサポート クラスはありませんが、XAML 言語の言語機能を処理するための一般的なロジックは System.Xaml および実装されている XAML リーダーと XAML ライターに常駐しています。 たとえば、x:TypeArguments は System.Xaml 実装の XAML リーダーと XAML ライターによって処理される属性です。これは XAML ノード ストリームで示すことができ、既定の (CLR ベースの) XAML スキーマ コンテキストに処理があり、XAML 型システム表現があります。 その結果、すべての XAML 言語レベルの機能に関する参照ドキュメントは、WPF ドキュメント セットの一部である WPF の基礎 のサブトピックとしてではなく、XAML サービス と .NET Framework ドキュメント セットの一般分野のサブトピックとして存在します (3.5 ドキュメント セットと同様)。
ValueSerializer とサポートされるクラス
ValueSerializer クラスは、特に、シリアル化するために、出力において複数のモードまたはノードが必要となる XAML シリアル化のケースで、文字列への型変換をサポートしています。 .NET Framework 3.5 および .NET Framework 3.0 では、WPF の ValueSerializer は WindowsBase アセンブリにありました。 .NET Framework 4 では、ValueSerializer クラスは System.Xaml にあり、WPF 上に構築される XAML 機能拡張シナリオだけではなく、すべての XAML 機能拡張シナリオを対象としています。IValueSerializerContext (サポート サービス) および DateTimeValueSerializer (固有のサブクラス) も System.Xaml に移行されました。
XAML 関連の属性
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 への呼び出しを完全修飾する必要があることもあります。