XamlReader クラス

定義

WPF の既定の XAML リーダーおよび関連付けられている XAML オブジェクト ライターを使用して、XAML 入力を読み取り、オブジェクト グラフを作成します。Reads XAML input and creates an object graph, using the WPF default XAML reader and an associated XAML object writer.

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

クラスを使用してButtonを文字列に変換する例を次に示します。 XamlWriterThe following example converts a Button into a string using the XamlWriter class. 次に、 Button XamlReaderクラスの静的Loadメソッドを使用して、文字列がに再度読み込まれます。The string is then loaded back into a Button using the static Load method on the XamlReader class.

// 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クラスのインスタンスを必要とします。The synchronous Load methods are static, but the asynchronous LoadAsync methods are not static and require an instance of the XamlReader class to use.

Loadメソッドの出力は、作成されたオブジェクトツリーまたはオブジェクトグラフのルートオブジェクトを表す単一のオブジェクトです。The output of the Load methods is a single object, which represents the root object of a created object tree or object graph. によってXamlReader作成されたオブジェクトグラフは、通常、実行時に WPF アプリケーションの既存のオブジェクトツリーに追加されます。Object graphs that are created by XamlReader are typically added to the existing object tree of a WPF application at run time. それ以外の場合、新しいオブジェクトグラフは、WPF アプリケーションモデルのために切断されたと見なされます。Otherwise the new object graph is considered disconnected for purposes of the WPF application model. これは、表示されず、WPF アプリケーションのメインオブジェクトツリー (Api FindName LogicalTreeHelper、、などVisualTreeHelper) に適用されるオブジェクトツリー技法を使用してアクセスできないことを意味します。This means that it does not render, and cannot be accessed using any of the object tree techniques as applied to the WPF application's main object tree (for example, the APIs FindName, LogicalTreeHelper, VisualTreeHelper). オブジェクトツリーの概念の詳細については、「 WPF のツリー」を参照してください。For more information on object tree concepts, see Trees in WPF.

XamlReaderでは、次の主要なシナリオがサポートされています。XamlReader supports the following primary scenarios:

  • 複製/オブジェクトファクトリ:追加の機構を使用しない場合、一般に、WPF オブジェクトツリー内の複数の位置に参照型を含めることはできません。Cloning/object factory: Without additional mechanisms, a reference type generally cannot be included in more than one position in a WPF object tree. (WPF での共有または再利用をサポートするその他のメカニズムの例としてはFreezable、に基づくオブジェクト、の項目ResourceDictionaryとしBrushて参照されるなどの一般的な共有可能オブジェクトのサポートなどがあります)。オブジェクトツリー内に既に存在するオブジェクトを複製する方法の1つは、をXamlWriter.Save使用してオブジェクトをシリアル化することです。(Examples of additional mechanisms that offer support for sharing or re-use in WPF include objects that are based on Freezable, or support for commonly shareable objects such as Brush that are referenced as an item from a ResourceDictionary.) One way to clone an object that is already in the object tree is to serialize the object using XamlWriter.Save. 次に、ストリームまたはLoad XmlReader中間のを使用して、の呼び出しの入力としてシリアル化された文字列を使用します。You then use the serialized string as input for a call to Load, with a stream or XmlReader as an intermediary.

  • ジャストインタイム情報に基づいてオブジェクトを構築します。多くの場合、遅延バインディングまたはユーザー指定の入力を既存のオブジェクトの状態に変更する方法があります。Constructing objects based on just-in-time information: There are often other ways to have late-binding or user-supplied input change the state of existing objects. たとえば、同じ値を使用して複数のプロパティを設定したり、データバインディングを使用したりすることができます。For example you could use the same value to set more than one property, or use data binding. ただし、作成するオブジェクトの型が実行時またはユーザー操作によってのみ determinable されるシナリオでは、多くの場合、入力用のLoad文字列を作成することによって、このようなオブジェクトを作成するのが便利です。But if you have a scenario where even the type of object to create is only determinable at run time or with user interaction, then creating such an object by building up a string for Load input is often a useful technique.

  • 既存のリソース技術を使用する:このStream型は、アプリケーションの境界を越えてデータやオブジェクトを転送するために他のフレームワークまたはテクノロジで頻繁に使用されます。Using existing resource techniques: The Stream type is used frequently in other frameworks or technologies for transferring data or objects across application boundaries or for similar situations. その後、アプリケーションのStream一部としてオブジェクトを作成するために最終的に使用する XAML 形式のデータを格納または取得するための手法を使用できます。You can then use the Stream techniques to store or obtain XAML-formatted data that you eventually use to create an object as part of your application.

  • 修正済みドキュメント: アプリケーションでは、WPF アプリケーションオブジェクトツリーおよび UI に含めるために、ローカルまたはダウンロードされた XPS ドキュメントを読み込む場合があります。Fixed documents: Your application might load local or downloaded XPS documents for inclusion in a WPF application object tree and UI.

注意

このドキュメントでは、オブジェクトツリーではなく、オブジェクトグラフについて説明します。This documentation sometimes describes an object graph, as opposed to an object tree. 厳密な親子関係は、実行時の WPF アプリケーションの実行時オブジェクトの関係に常に存在するとは限りません。そのため、オブジェクトグラフは、より広く適用される用語です。A strict parent-child relationship does not always exist in the run time object relationships of a run time WPF application, so an object graph is a more widely applicable terminology. ただし、wpf にも2つの異なる tree 概念化 apiLogicalTreeHelper( VisualTreeHelper) が含まれているため、ツリーの比喩は wpf のほとんどの実際のケースに適切に適用されます。However, because WPF also includes two different tree conceptualization APIs (LogicalTreeHelper, VisualTreeHelper) the tree metaphor still applies adequately to most real-world cases in WPF. ただし、xaml 言語の観点からは、多くの場合、オブジェクトグラフは XAML からオブジェクトがどのように作成されるかを考えるのに最適な方法です。 xaml 言語自体では、リレーションシップをツリー構造を再構築します。From the XAML language perspective however, the object graph is often the best way to think about how objects are created out of XAML, because the XAML language itself does not necessarily specify helper class methodologies that bring the relationships more into a tree structure again.

コードアクセスセキュリティ、ルース XAML、XamlReaderCode Access Security, Loose XAML, and XamlReader

XAML は、オブジェクトのインスタンス化と実行を直接表すマークアップ言語です。XAML is a markup language that directly represents object instantiation and execution. そのため、XAML で作成された要素は、同じように生成されたコードと同じように、システムリソース (ネットワークアクセス、ファイルシステム IO など) と対話することができます。Therefore, elements created in XAML have the same ability to interact with system resources (network access, file system IO, for example) as the equivalent generated code does.

WPFWPFセキュリティフレームワーク.NET.NET コード アクセス セキュリティ (CAS)Code Access Security (CAS)をサポートします。supports the .NET.NET security framework コード アクセス セキュリティ (CAS)Code Access Security (CAS). これは、 WPFWPFインターネットゾーンで実行されているコンテンツの実行アクセス許可が低下していることを意味します。This means that WPFWPF content running in the internet zone has reduced execution permissions. "疎 xaml" (xaml ビューアーによって読み込み時に解釈XAML ブラウザー アプリケーション (XBAP)XAML browser application (XBAP)される、コンパイルされていない xaml のページ)。通常は、このインターネットゾーンで実行され、同じアクセス許可セットを使用します。"Loose XAML" (pages of noncompiled XAML interpreted at load time by a XAML viewer) and XAML ブラウザー アプリケーション (XBAP)XAML browser application (XBAP) are usually run in this internet zone and use the same permission set. ただし、完全に信頼されたアプリケーションに読み込まれる XAML は、ホストアプリケーションと同じようにシステムリソースにアクセスできます。However, XAML loaded in to a fully trusted application has the same access to the system resources as the hosting application does. 詳細については、「 WPF 部分信頼セキュリティ」を参照してください。For more information, see WPF Partial Trust Security.

に対するこれらのステートメントのXamlReader影響は、アプリケーションの設計で、読み込む XAML に関する信頼の決定を行う必要があることです。The implications of these statements for XamlReader is that your application design must make trust decisions about the XAML you decide to load. 信頼されていない XAML を読み込む場合は、結果として得られるオブジェクトグラフを読み込む方法について、独自のサンドボックス手法を実装することを検討してください。If you are loading XAML that is not trusted, consider implementing your own sandboxing technique for how you load the resulting object graph.

XamlReader部分信頼コードによって呼び出すこともできます。XamlReader can also be called by partial trust code. この場合、コードアクセスセキュリティにはインターネットセキュリティゾーンが適用されます。In this case, Internet security zone is applied for code access security. 読み込まれた XAML 内のものがインターネットセキュリティゾーンで無効な場合は、XAML 解析の例外がスローされます。If anything in the loaded XAML is invalid under Internet security zone, a XAML parse exception is thrown. XBAP や、プラットフォームレベルで部分的に信頼されているそのXamlReader他のケースでは、は実行の一部であるため、明示的な部分信頼呼び出しと同じ例外動作が発生します。Under XBAP and other cases that are partial trust at the platform level, where XamlReader is part of the execution, you get the same exception behavior as with explicit partial trust calls.

WPF XAML、XAML リーダー/ライター、および XAML 言語のバージョン管理WPF XAML, XAML Readers/Writers, and XAML Language Versioning

XAML2009 には、 x:Referencex:FactoryMethodなどの言語機能が含まれています。XAML2009 includes language features such as x:Reference and x:FactoryMethod. またはLoad Parseのシグネチャを使用して、これらの機能を使用する XAML を読み込むことができます。You can use signatures of Load or Parse to load XAML that uses these features. ただし、これらの言語機能は、マークアップコンパイルが必要な XAML ではサポートされていません (WPF アプリケーションのページビルドアクションの xaml、ビルドアクションのマークアップコンパイルタスクを含む xaml など)。However, those language features are not supported for XAML that needs to be markup compiled (such as XAML for the Page build action in a WPF application, or any XAML that involves the markup compile task in the build actions).

Wpf の内部にアクセスする一般的な概念である wpf の型と wpf テクノロジは、一般にサポートされています。WPF types and the WPF technology in general support concepts that rely on access to WPF internals. たとえば、WPF が依存関係プロパティを実装する方法は、効率的な型メンバー参照の内部手法に依存します。For instance, how WPF implements dependency properties relies on internal techniques for efficient type-member lookup. これらの内部構造へのアクセスは、 XamlWriter System.Windows.Markup名前空間およびプレゼンテーションフレームワークアセンブリとXamlReaderの間で提供される XAML の読み取りおよび書き込み api によって有効になります。Access to these internals is enabled by the XAML reading and writing APIs provided in XamlWriter and XamlReader from the System.Windows.Markup namespace and PresentationFramework assembly. ただし、.xaml アセンブリ (、 System.Xaml.XamlReader System.Xaml.XamlWriterに基づくクラス) の下位レベルの xaml リーダーおよび xaml ライターには、WPF の内部構造へのアクセス権はありません。However, the lower-level XAML readers and XAML writers from the System.Xaml assembly (classes based on System.Xaml.XamlReader, System.Xaml.XamlWriter) do not have access to the WPF internals. App.xaml と WPF 固有のアセンブリとの依存関係はありません。There is no dependency from System.Xaml to any WPF-specific assembly. WPF の内部構造にアクセスできない場合、システムの Xaml とライターは、wpf のすべての型、または WPF の種類に基づく型を正しくロードまたは保存することはできません。Without access to the WPF internals, System.Xaml readers and writers cannot correctly load or save all WPF types, or types based on WPF types. 特に、.Xaml リーダーとライターは、WPF の依存関係プロパティのバッキングプロパティストアなどの概念や、WPF がスタイル、リソースディクショナリ、テンプレートを使用する方法の詳細については理解していません。In particular, the System.Xaml readers and writers do not understand concepts such as the WPF dependency property backing property store, or all the specifics of how WPF uses styles, resource dictionaries and templates. そのため、次のような選択肢があります。Therefore you have a choice to make:

  • WPF 型を読み込む場合、または、何らかの方法で BAML フォームで XAML を使用する場合は、プレゼンテーションフレームワークの XAML リーダーと XAML ライターを使用します。If you are loading WPF types, and/or you are using XAML in BAML form in any way, use the PresentationFramework XAML readers and XAML writers.

  • WPF の型や BAML 形式の XAML に依存しておらず、そのフレームワークに固有の理由により、別の特定のテクノロジの XAML リーダーまたは XAML ライターの実装を使用していない場合は、.xaml XAML リーダーと XAML ライターを使用します。If you are not relying on any WPF types or the BAML form of XAML, and are not using another specific technology's XAML reader or XAML writer implementation for reasons that are specific to that framework, use the System.Xaml XAML readers and XAML writers.

.NET 4 でのシステムのバッキング実装System.Xaml Backing Implementation in .NET 4

XamlReaderは、WPF フレームワークレベルの XAML パーサーの呼び出し可能な API サーフェイスです。XamlReader is the callable API surface for the WPF framework-level XAML parser. また、同じ基になる xaml パーサーによって、およびを対象.NET Framework 3.0.NET Framework 3.0.NET Framework 3.5.NET Framework 3.5する WPF アプリケーションのランタイム XAML の読み込みと解析も実行されます。The same underlying XAML parser also performs the run-time XAML loading and parsing for WPF applications that target .NET Framework 3.0.NET Framework 3.0 and .NET Framework 3.5.NET Framework 3.5.

を対象.NET Framework 4.NET Framework 4とする場合、外部 API は同じですが、実装の一部は、xaml の解析.NET Framework 4.NET Framework 4の技術的およびレポートの側面の多くを改善する、システムの xaml の一般的な実装に基づいて構築されます。If you are targeting .NET Framework 4.NET Framework 4, the external API is the same, but parts of the implementation are built on the .NET Framework 4.NET Framework 4 general XAML implementation in the System.Xaml assembly, which improves many of the technical and reporting aspects of parsing XAML. ターゲット.NET Framework 4.NET Framework 4を指定する場合は、参照として page.xaml を含める必要があります。また、報告される例外などの実装の詳細は、システムの定義済みの型から取得される場合があります。Targeting .NET Framework 4.NET Framework 4 necessarily entails including System.Xaml as a reference, and details of implementation such as the exceptions reported may come from System.Xaml defined types.

コンストラクター

XamlReader()

XamlReader クラスの新しいインスタンスを初期化します。Initializes a new instance of the XamlReader class.

メソッド

CancelAsync()

非同期読み込み操作が保留中である場合、現在の非同期読み込み操作を中止します。Aborts the current asynchronous load operation, if there is an asynchronous load operation pending.

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判定します。Determines whether the specified object is equal to the current object.

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)
GetWpfSchemaContext()

XamlSchemaContext の WPF スキーマ コンテキスト設定を表す XamlReader オブジェクトを返します。Returns a XamlSchemaContext object that represents the WPF schema context settings for a XamlReader.

Load(Stream)

指定した Stream 内の XAML 入力を読み取り、対応するオブジェクト ツリーのルートである Object を返します。Reads the XAML input in the specified Stream and returns an Object that is the root of the corresponding object tree.

Load(Stream, ParserContext)

指定した Stream 内の XAML 入力を読み取り、対応するオブジェクト ツリーのルートであるオブジェクトを返します。Reads the XAML input in the specified Stream and returns an object that is the root of the corresponding object tree.

Load(XamlReader)

指定した XamlReader を使用して XAML 入力を読み取り、対応するオブジェクト ツリーのルートであるオブジェクトを返します。Reads the XAML input through a provided XamlReader and returns an object that is the root of the corresponding object tree.

Load(XmlReader)

指定した XmlReader 内の XAML 入力を読み取り、対応するオブジェクト ツリーのルートであるオブジェクトを返します。Reads the XAML input in the specified XmlReader and returns an object that is the root of the corresponding object tree.

LoadAsync(Stream)

指定した Stream 内の XAML 入力を読み取り、対応するオブジェクト ツリーのルートを返します。Reads the XAML input in the specified Stream and returns the root of the corresponding object tree.

LoadAsync(Stream, ParserContext)

指定した Stream 内の XAML 入力を読み取り、対応するオブジェクト ツリーのルートを返します。Reads the XAML input in the specified Stream and returns the root of the corresponding object tree.

LoadAsync(XmlReader)

指定した XmlReader 内の XAML 入力を読み取り、対応するオブジェクト ツリーのルートを返します。Reads the XAML input in the specified XmlReader and returns the root of the corresponding object tree.

MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)
Parse(String)

指定したテキスト文字列内の XAML 入力を読み取り、指定したマークアップのルートに対応するオブジェクトを返します。Reads the XAML input in the specified text string and returns an object that corresponds to the root of the specified markup.

Parse(String, ParserContext)

指定したテキスト文字列 (指定した ParserContext を使用) 内の XAML マークアップを読み取り、指定したマークアップのルートに対応するオブジェクトを返します。Reads the XAML markup in the specified text string (using a specified ParserContext) and returns an object that corresponds to the root of the specified markup.

ToString()

現在のオブジェクトを表す string を返します。Returns a string that represents the current object.

(継承元 Object)

イベント

LoadCompleted

非同期の読み込み操作の完了時に発生します。Occurs when an asynchronous load operation completes.

適用対象

こちらもご覧ください