XamlReader.Load(String) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
整形式の XAML フラグメントを解析し、対応するオブジェクト ツリーを作成し、オブジェクト ツリーのルートを返します。
public:
static Platform::Object ^ Load(Platform::String ^ xaml);
static IInspectable Load(winrt::hstring const& xaml);
public static object Load(string xaml);
function load(xaml)
Public Shared Function Load (xaml As String) As Object
パラメーター
- xaml
-
String
Platform::String
winrt::hstring
有効な XAML フラグメントを含む文字列。
戻り値
作成されたオブジェクト ツリーのルート オブジェクト。
例
次の使用例は、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 は、WINDOWS ランタイム XAML パーサーによる 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/presentation
Windows ランタイム XAML ボキャブラリです。 - XAML 名前空間マッピングで参照されるカスタム アセンブリは、アプリケーションで既に使用できる必要があります。
- XAML では 、x:Class 属性を指定したり、イベント ハンドラーに XAML で定義された属性を含めたりしないでください。
- 一般的な XAML 名前スコープで FindName を使用して、追加されたランタイム オブジェクトを検索することはできませんが、作成されたオブジェクトの特定の XAML 名前スコープ内で検索できます。 詳しくは、「XAML 名前スコープ」をご覧ください。
- オブジェクト作成ロジックでは、読み込まれた XAML を実行時に分離コード クラスと統合することはできません。 イベント ハンドラーを追加する場合は、Load 結果のオブジェクト ツリー構造内から取得したオブジェクトを参照し、ハンドラーをアタッチするための言語固有の構文 (など
+=
) を使用して、コード内でこれを行う必要があります。 - 既存の XAML コンテンツが存在する必要があります。コンテンツのツリー全体を置き換えることはできません。 読み込まれた XAML ページのアプリ モデルへの影響がアクティブなままになるように、少なくとも元のルート要素を保持する必要があります。
- Load から作成されたオブジェクトは、プライマリ オブジェクト ツリー内の 1 つの場所にのみ割り当てることができます。 同じ XAML から作成されたオブジェクトをアプリケーションのプライマリ オブジェクト ツリーのさまざまな領域に追加する場合は、同じ入力文字列を使用して XAML を複数回解析し、戻り値に異なる変換先を使用する必要があります。
- 残りのプライマリ オブジェクト ツリーは、設定する適切なプロパティをサポートしている必要があります。