次の方法で共有


XamlReader クラス

定義

XAML を解析し、対応するオブジェクト ツリーを作成するための XAML プロセッサ エンジンを提供します。

public ref class XamlReader sealed
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class XamlReader final
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class XamlReader
Public NotInheritable Class XamlReader
継承
Object Platform::Object IInspectable XamlReader
属性

この例では、XAML 文字列から 1 つの Ellipse を作成し、 Load を呼び出します。 次に、作成されたが切断された Ellipse を、実行中の UWP アプリに既に存在していた要素の Children コレクションに接続します。 最後に、この例では、クエリを使用して追加された場所で Ellipse に再度アクセスし、そのプロパティの 1 つを変更します。

string xaml =
"<Ellipse Name=\"EllipseAdded\" Width=\"300.5\" Height=\"200\" 
Fill=\"Red\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"/>";
object ellipse = XamlReader.Load(xaml);
//stackPanelRoot is the visual root of a Page in existing XAML markup already loaded by the appmodel
stackPanelRoot.Children.Add(ellipse as UIElement);
//walk the tree using XLinq result and cast back to a XAML type to set a property on it at runtime
var result = (from item in stackPanelRoot.Children
  where (item is FrameworkElement) 
  && ((FrameworkElement) item).Name == "EllipseAdded"
  select item as FrameworkElement).FirstOrDefault();
((Ellipse) result).Fill = new SolidColorBrush(Colors.Yellow);

注釈

XamlReader は、文字列形式の XAML マークアップの入力に基づいてオブジェクトを作成するメソッドを持つユーティリティ クラスです。 XamlReader は、XAML がWindows ランタイム XAML パーサーによって解析される方法と、UWP アプリの UI を定義するための XAML の使用と並行するオブジェクト構築動作を提供します。

XamlReader.Load を使用して XAML 入力を解析すると、Windows ランタイム オブジェクトの実行時オブジェクト ツリーが生成されます。 オブジェクト ツリーは、実行時に、完全なツリーの一部を歩いて、それらのオブジェクトに対してプログラムを実行する方法を提供します。

XamlReader.Load メソッドを使用して XAML からオブジェクトを作成する場合は、理解しておくことが重要な概念がいくつかあります。

  • XAML コンテンツ文字列では、1 つのルート要素を定義する必要があります。
  • XAML コンテンツ文字列は、適切な形式の XML と、有効な XAML である必要があります。
  • XAML コンテンツでは、既定の xmlns を定義する必要があります。 通常、これは で識別されるhttp://schemas.microsoft.com/winfx/2006/xaml/presentationWindows ランタイム XAML ボキャブラリです。
  • XAML 名前空間マッピングで参照されるカスタム アセンブリは、アプリケーションで既に使用できる必要があります。
  • XAML では 、x:Class 属性を指定したり、イベント ハンドラーに XAML で定義された属性を含めたりしないでください。
  • 一般的な XAML 名前スコープで FindName を使用して、追加されたランタイム オブジェクトを検索することはできませんが、作成されたオブジェクトの特定の XAML 名前スコープ内で検索できます。 詳しくは、「XAML 名前スコープ」をご覧ください。
  • オブジェクト作成ロジックでは、読み込まれた XAML を実行時に分離コード クラスと統合することはできません。 イベント ハンドラーを追加する場合は、 Load 結果のオブジェクト ツリー構造内から取得したオブジェクトを参照し、ハンドラーをアタッチするための言語固有の構文 (など +=) を使用して、コード内でこれを行う必要があります。
  • 既存の XAML コンテンツが存在する必要があります。コンテンツのツリー全体を置き換えることはできません。 読み込まれた XAML ページのアプリ モデルへの影響がアクティブなままになるように、少なくとも元のルート要素を保持する必要があります。
  • Load から作成されたオブジェクトは、プライマリ オブジェクト ツリー内の 1 つの場所にのみ割り当てることができます。 同じ XAML から作成されたオブジェクトをアプリケーションのプライマリ オブジェクト ツリーのさまざまな領域に追加する場合は、戻り値に異なる変換先を使用して、同じ入力文字列を使用して XAML を複数回解析する必要があります。
  • 残りのプライマリ オブジェクト ツリーは、設定する適切なプロパティをサポートしている必要があります。

メソッド

Load(String)

整形式の XAML フラグメントを解析し、対応するオブジェクト ツリーを作成し、オブジェクト ツリーのルートを返します。

LoadWithInitialTemplateValidation(String)

整形式の XAML フラグメントを解析し、対応するオブジェクト ツリーを作成し、オブジェクト ツリーのルートを返します。 また、リンクされたテンプレートの読み込み時間検証も実行します。

適用対象

こちらもご覧ください