XamlReader クラス

定義

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

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

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

// 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 アプリケーションのメイン オブジェクト ツリー (APIFindName、、など) に適用されるオブジェクト ツリー手法を使用してレンダリングされず、LogicalTreeHelperVisualTreeHelperアクセスできないことを意味します。 オブジェクト ツリーの概念の詳細については、「 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 言語の観点から見ると、オブジェクト グラフが 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:Referencex:FactoryMethod などの言語機能が含まれています。 これらの機能を使用する XAML の Load シグネチャを使用するか Parse 、読み込むことができます。 ただし、これらの言語機能は、マークアップ コンパイルが必要な XAML (WPF アプリケーションの ページ ビルド アクションの XAML や、ビルド アクションにマークアップ コンパイル タスクを含む XAML など) ではサポートされていません。

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

  • WPF 型を読み込んでいる場合、または BAML フォームで XAML を使用している場合は、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 .NET Framework 3.5 を対象とする WPF アプリケーションのランタイム 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)
Load(Stream, ParserContext)

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

Load(Stream, ParserContext, Boolean)
Load(XamlReader)

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

Load(XmlReader)

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

Load(XmlReader, Boolean)
LoadAsync(Stream)

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

LoadAsync(Stream, Boolean)
LoadAsync(Stream, ParserContext)

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

LoadAsync(Stream, ParserContext, Boolean)
LoadAsync(XmlReader)

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

LoadAsync(XmlReader, Boolean)
MemberwiseClone()

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

(継承元 Object)
Parse(String)

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

Parse(String, Boolean)
Parse(String, ParserContext)

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

Parse(String, ParserContext, Boolean)
ToString()

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

(継承元 Object)

イベント

LoadCompleted

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

適用対象

こちらもご覧ください