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 RUNTIME 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 を複数回解析する必要があります。
- 残りのプライマリ オブジェクト ツリーは、設定する適切なプロパティをサポートしている必要があります。