XamlReader クラス

定義

WPF の既定の XAML リーダーおよび関連付けられている XAML オブジェクト ライターを使用して、XAML 入力を読み取り、オブジェクト グラフを作成します。

public ref class XamlReader
public class XamlReader
type XamlReader = class
Public Class XamlReader
継承
XamlReader

次の例では、 クラスを使用して を文字列にXamlWriter変換Buttonします。 その後、 クラスの静的Loadメソッドを使用して、文字列が XamlReader に読み込Buttonまれます。

// Create the Button.
Button originalButton = new Button();
originalButton.Height = 50;
originalButton.Width = 100;
originalButton.Background = Brushes.AliceBlue;
originalButton.Content = "Click Me";

// Save the Button to a string.
string savedButton = XamlWriter.Save(originalButton);

// Load the button
StringReader stringReader = new StringReader(savedButton);
XmlReader xmlReader = XmlReader.Create(stringReader);
Button readerLoadButton = (Button)XamlReader.Load(xmlReader);
' Create the Button.
Dim originalButton As New Button()
originalButton.Height = 50
originalButton.Width = 100
originalButton.Background = Brushes.AliceBlue
originalButton.Content = "Click Me"

' Save the Button to a string.
Dim savedButton As String = XamlWriter.Save(originalButton)

' Load the button
Dim stringReader As New StringReader(savedButton)
Dim xmlReader As XmlReader = XmlReader.Create(stringReader)
Dim readerLoadButton As Button = CType(XamlReader.Load(xmlReader), Button)

注釈

同期 Load メソッドは静的ですが、非同期 LoadAsync メソッドは静的ではなく、 クラスのインスタンスを XamlReader 使用する必要があります。

メソッドの Load 出力は 1 つのオブジェクトであり、作成されたオブジェクト ツリーまたはオブジェクト グラフのルート オブジェクトを表します。 によって XamlReader 作成されるオブジェクト グラフは、通常、実行時に WPF アプリケーションの既存のオブジェクト ツリーに追加されます。 それ以外の場合、新しいオブジェクト グラフは WPF アプリケーション モデルの目的で切断されたと見なされます。 つまり、WPF アプリケーションのメイン オブジェクト ツリー (APIFindNameLogicalTreeHelperVisualTreeHelper、 など) に適用されるオブジェクト ツリーの手法を使用して、レンダリングされず、アクセスできません。 オブジェクト ツリーの概念の詳細については、「 WPF のツリー」を参照してください。

XamlReader は、次の主要なシナリオをサポートしています。

  • 複製/オブジェクト ファクトリ: 追加のメカニズムがないと、通常、参照型を WPF オブジェクト ツリー内の複数の位置に含めることはできません。 (WPF での共有または再利用のサポートを提供する追加のメカニズムの例には、 にFreezable基づくオブジェクト、または からResourceDictionaryアイテムとして参照される などBrush、一般的に共有可能なオブジェクトのサポートが含まれます)。オブジェクト ツリーに既にあるオブジェクトを複製する方法の 1 つは、 を使用してXamlWriter.Saveオブジェクトをシリアル化することです。 次に、シリアル化された文字列を への呼び出し Loadの入力として、ストリームまたは XmlReader 中間として使用します。

  • Just-In-Time 情報に基づいてオブジェクトを構築する: 遅延バインディングまたはユーザー指定の入力によって既存のオブジェクトの状態を変更する方法は他にもあります。 たとえば、同じ値を使用して複数のプロパティを設定したり、データ バインディングを使用したりできます。 ただし、作成するオブジェクトの種類が実行時またはユーザーの操作でのみ決定可能なシナリオがある場合は、入力用 Load の文字列を作成してこのようなオブジェクトを作成することは、多くの場合、便利な手法です。

  • 既存のリソース手法の使用: 型は Stream 、アプリケーションの境界を越えてデータまたはオブジェクトを転送したり、同様の状況に使用したりするために、他のフレームワークまたはテクノロジで頻繁に使用されます。 その後、この手法を Stream 使用して、アプリケーションの一部としてオブジェクトを作成するために最終的に使用する XAML 形式のデータを格納または取得できます。

  • 修正されたドキュメント: アプリケーションは、WPF アプリケーション オブジェクト ツリーと UI に含めるために、ローカルまたはダウンロードした XPS ドキュメントを読み込む場合があります。

注意

このドキュメントでは、オブジェクト ツリーではなく、オブジェクト グラフについて説明する場合があります。 厳密な親子関係は、実行時 WPF アプリケーションの実行時オブジェクトリレーションシップに常に存在するとは限らないため、オブジェクト グラフはより広く適用できる用語です。 ただし、WPF には 2 つの異なるツリー概念化 API (LogicalTreeHelper、) も含まれているため、 VisualTreeHelperツリーのメタファーは WPF のほとんどの実際のケースに適切に適用されます。 ただし、XAML 言語の観点から見ると、XAML 言語自体が必ずしもリレーションシップをよりツリー構造に取り込むヘルパー クラスの手法を指定するとは限らないため、多くの場合、オブジェクト グラフは XAML からオブジェクトを作成する方法を考えるのに最適な方法です。

コード アクセス セキュリティ、Loose XAML、XamlReader

XAML は、オブジェクトのインスタンス化と実行を直接表すマークアップ言語です。 そのため、XAML で作成された要素は、生成された同等のコードと同じように、システム リソース (ネットワーク アクセス、ファイル システム IO など) を操作できます。

WPF では、.NET セキュリティ フレームワーク Code Access Security (CAS) がサポートされています。 これは、インターネット ゾーンで実行されている WPF コンテンツの実行アクセス許可が制限されていることを意味します。 "Loose XAML" (XAML ビューアーによって読み込み時に解釈される非コンパイル XAML のページ) と XAML ブラウザー アプリケーション (XBAP) は、通常、このインターネット ゾーンで実行され、同じアクセス許可セットを使用します。 ただし、完全に信頼されたアプリケーションリに読み込まれた XAML は、ホスト アプリケーションと同じようにシステム リソースにアクセスできます。 詳細については、「WPF 部分信頼セキュリティ」を参照してください。

に対 XamlReader するこれらのステートメントの影響は、アプリケーション設計で読み込む XAML に関する信頼の決定を行う必要があるということです。 信頼されていない XAML を読み込む場合は、結果のオブジェクト グラフを読み込む方法に関する独自のサンドボックス手法を実装することを検討してください。

XamlReader 部分信頼コードによって呼び出すこともできます。 この場合、コード アクセス セキュリティにはインターネット セキュリティ ゾーンが適用されます。 読み込まれた XAML 内の何かがインターネット セキュリティ ゾーンで無効な場合は、XAML 解析例外がスローされます。 XBAP と、実行の一部である XamlReader プラットフォーム レベルで部分信頼されるその他のケースでは、明示的な部分信頼呼び出しと同じ例外動作が発生します。

WPF XAML、XAML リーダー/ライター、XAML 言語のバージョン管理

XAML2009には、x:Reference や x:FactoryMethod などの言語機能が含まれています。 または ParseLoadシグネチャを使用して、これらの機能を使用する XAML を読み込むことができます。 ただし、これらの言語機能は、マークアップ コンパイルが必要な XAML (WPF アプリケーションの ページ ビルド アクションの XAML や、ビルド アクションのマークアップ コンパイル タスクを含む XAML など) ではサポートされていません。

WPF 型と WPF テクノロジは、WPF 内部へのアクセスに依存する概念を一般的にサポートします。 たとえば、WPF が依存関係プロパティを実装する方法は、効率的な型メンバー検索のための内部手法に依存します。 これらの内部へのアクセスは、名前空間と PresentationFramework アセンブリでXamlWriter提供される API の読み取りとXamlReaderSystem.Windows.Markup書き込みによって有効になります。 ただし、System.Xaml アセンブリ (、 System.Xaml.XamlWriterSystem.Xaml.XamlReader基づくクラス) の下位レベルの XAML リーダーと XAML ライターは、WPF 内部にアクセスできません。 System.Xaml から WPF 固有のアセンブリへの依存関係はありません。 WPF の内部にアクセスしないと、System.Xaml リーダーとライターは、WPF のすべての型、または WPF 型に基づく型を正しく読み込んだり保存したりできません。 特に、System.Xaml リーダーとライターは、WPF 依存関係プロパティ バッキング プロパティ ストアなどの概念や、WPF でスタイル、リソース ディクショナリ、テンプレートを使用する方法のすべての詳細を理解していません。 そのため、次の選択肢があります。

  • WPF 型を読み込んでいる場合、または XAML を BAML 形式で何らかの方法で使用している場合は、PresentationFramework XAML リーダーと XAML ライターを使用します。

  • WPF 型または BAML 形式の XAML に依存せず、そのフレームワークに固有の理由で別の特定のテクノロジの XAML リーダーまたは XAML ライターの実装を使用していない場合は、System.Xaml XAML リーダーと XAML ライターを使用します。

.NET 4 での System.Xaml バッキング実装

XamlReader は、WPF フレームワーク レベルの XAML パーサーの呼び出し可能な API サーフェスです。 また、基になる同じ XAML パーサーは、3.0 および .NET Framework 3.5 を対象とする WPF アプリケーション.NET Frameworkランタイム XAML の読み込みと解析も実行します。

.NET Framework 4 を対象としている場合、外部 API は同じですが、実装の一部は System.Xaml アセンブリの .NET Framework 4 の一般的な XAML 実装に基づいて構築されています。これにより、XAML の解析に関する技術的およびレポート的側面の多くが改善されます。 .NET Framework 4 を対象とするには、必ずしも System.Xaml を参照として含める必要があります。また、報告される例外などの実装の詳細は、System.Xaml で定義された型から取得される可能性があります。

コンストラクター

XamlReader()

XamlReader クラスの新しいインスタンスを初期化します。

メソッド

CancelAsync()

非同期読み込み操作が保留中である場合、現在の非同期読み込み操作を中止します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
GetWpfSchemaContext()

XamlSchemaContext の WPF スキーマ コンテキスト設定を表す XamlReader オブジェクトを返します。

Load(Stream)

指定した Stream 内の XAML 入力を読み取り、対応するオブジェクト ツリーのルートである Object を返します。

Load(Stream, Boolean)

WPF の既定の XAML リーダーおよび関連付けられている XAML オブジェクト ライターを使用して、XAML 入力を読み取り、オブジェクト グラフを作成します。

Load(Stream, ParserContext)

指定した Stream 内の XAML 入力を読み取り、対応するオブジェクト ツリーのルートであるオブジェクトを返します。

Load(Stream, ParserContext, Boolean)

WPF の既定の XAML リーダーおよび関連付けられている XAML オブジェクト ライターを使用して、XAML 入力を読み取り、オブジェクト グラフを作成します。

Load(XamlReader)

指定した XamlReader を使用して XAML 入力を読み取り、対応するオブジェクト ツリーのルートであるオブジェクトを返します。

Load(XmlReader)

指定した XmlReader 内の XAML 入力を読み取り、対応するオブジェクト ツリーのルートであるオブジェクトを返します。

Load(XmlReader, Boolean)

WPF の既定の XAML リーダーおよび関連付けられている XAML オブジェクト ライターを使用して、XAML 入力を読み取り、オブジェクト グラフを作成します。

LoadAsync(Stream)

指定した Stream 内の XAML 入力を読み取り、対応するオブジェクト ツリーのルートを返します。

LoadAsync(Stream, Boolean)

WPF の既定の XAML リーダーおよび関連付けられている XAML オブジェクト ライターを使用して、XAML 入力を読み取り、オブジェクト グラフを作成します。

LoadAsync(Stream, ParserContext)

指定した Stream 内の XAML 入力を読み取り、対応するオブジェクト ツリーのルートを返します。

LoadAsync(Stream, ParserContext, Boolean)

WPF の既定の XAML リーダーおよび関連付けられている XAML オブジェクト ライターを使用して、XAML 入力を読み取り、オブジェクト グラフを作成します。

LoadAsync(XmlReader)

指定した XmlReader 内の XAML 入力を読み取り、対応するオブジェクト ツリーのルートを返します。

LoadAsync(XmlReader, Boolean)

WPF の既定の XAML リーダーおよび関連付けられている XAML オブジェクト ライターを使用して、XAML 入力を読み取り、オブジェクト グラフを作成します。

MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
Parse(String)

指定したテキスト文字列内の XAML 入力を読み取り、指定したマークアップのルートに対応するオブジェクトを返します。

Parse(String, Boolean)

WPF の既定の XAML リーダーおよび関連付けられている XAML オブジェクト ライターを使用して、XAML 入力を読み取り、オブジェクト グラフを作成します。

Parse(String, ParserContext)

指定したテキスト文字列 (指定した ParserContext を使用) 内の XAML マークアップを読み取り、指定したマークアップのルートに対応するオブジェクトを返します。

Parse(String, ParserContext, Boolean)

WPF の既定の XAML リーダーおよび関連付けられている XAML オブジェクト ライターを使用して、XAML 入力を読み取り、オブジェクト グラフを作成します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

イベント

LoadCompleted

非同期の読み込み操作の完了時に発生します。

適用対象

こちらもご覧ください