情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

FrameworkElement.Name プロパティ

2013/12/12

オブジェクトの識別名を取得または設定します。XAML プロセッサが XAML マークアップからオブジェクト ツリーを作成すると、ランタイム コードでは、XAML で宣言されたオブジェクトをこの名前で参照できます。

Namespace:  System.Windows
アセンブリ:  System.Windows (System.Windows.dll 内)
XAML の XMLNS: xmlns にマップされていません。

public string Name { get; set; }
<frameworkElement Name="xamlNameString"/>

プロパティ値

型: System.String
オブジェクトの名前は、XamlName の文法で有効な文字列でなければなりません。既定値は空の文字列です。

依存関係プロパティの識別子フィールド:  NameProperty

このプロパティは、Windows Phone アプリケーションで最初に読み込まれた XAML マークアップのオブジェクトの Name 属性を指定するために使用されるのが最も一般的です。

Name に使用される文字列値にはいくつかの制限があります。これは、XAML 仕様で定義されている、基になる x:Name によって適用されるものです。特に注意する制限として、Name は先頭が文字かアンダースコア (_) で始まる必要があり、使用できるのは文字、数字、およびアンダースコアのみです。

このプロパティの用途は、XAML 言語の x:Name 属性に対する Windows Phone 固有の等価値の取得または設定に利用できるプロパティを提供することです。x:Name は、XAML マークアップからオブジェクト ツリーを構築するときに XAML プロセッサで使用されます。XAML プロセッサでは、Windows Phone プロジェクトで XAML の既定のコンパイル ビルド アクションを Page として使用する場合は、これによってフィールド参照を生成するオブジェクト ツリーが作成されます。フィールド参照により、ページ固有の分離コードで名前を使用してオブジェクトを直接参照できるプログラミング モデルが可能になります。

メモメモ:

フィールド参照を作成するため (また、イベント接続を追加するため)、読み込み前に XAML を前処理するビルド アクションを、このドキュメントではマークアップ コンパイルと呼ぶことがあります。

ほとんどの点で、x:Name 属性と Name プロパティは等価です。Name をコードで取得して、x:Name として値を設定できます。x:NameName は XAML 属性として同時に指定することはできません。マークアップで x:Name 属性と Name 属性の両方を同じオブジェクト要素で設定しようとすると、パーサー エラーがスローされます。

メモメモ:

XAML では、Name を任意の DependencyObject (FrameworkElement ではなく) の属性として解析動作で使用できます。ただし、この動作はマネージ コード API には適用されません。また、XAML を使用または生成できるすべてのツールで完全にサポートされるとは限りません。

名前は、XAML 名前スコープ内で一意であることが必要です。通常、XAML 名前スコープは XAML ページによって定義されますが、テンプレートや API の呼び出し (Load など) などの特定の機能は、個別の XAML 名前スコープを定義できます。

重要: 重要:

Name はローカライズしないでください。Name は、コード ビハインドでコード変数として使用されます。このようなコードには、通常、UI を定義する XAML ファイルに他の方法でアクセスできる可能性があるローカライズ担当者からはアクセスできません。ただし、これは、配置モデルとローカリゼーションの手順によって異なります。これは、Name からの文字列を UI に表示してはならない理由の 1 つです。

名前のシナリオ

UI 要素を定義する XAML の Name を設定すると、いくつかの主要なシナリオがサポートされます。

  • アニメーションのターゲット設定: オブジェクト プロパティにアニメーションを適用するには、特定のインスタンスをターゲットに設定する必要があります。それを行うには、任意の TimelineStoryboard.TargetName 添付プロパティを設定します。ここで設定する値は、Name として割り当てた文字列です。

  • コントロール テンプレートのパーツ: ビジュアル状態モデルおよびコントロールの初期化をサポートするために、コントロール作成者は、テンプレート コントロールの主要パーツに Name 値を指定する必要があります。

  • 一般的な実行時の対話: たとえば、イベント ハンドラー内のコードは、変更 UI を提供するオブジェクトのイベントを処理する場合がありますが、プロパティへの変更は、近くの別の UI 要素で発生します。このような状況のコードを記述する最も簡単な方法は、Name から生成されたフィールドの参照を使用することです。

XamlReader.Load に対する XAML での名前

Load の入力の一部である要素に対して、Name または x:Name を指定できます。ただし、このようにして作成した名前は個別の XAML 名前スコープに適用され、その適用範囲は XAML 入力のルートまでに限られます。Load を呼び出した後、作成されたオブジェクトをメイン オブジェクト ツリーに追加すると、FindName を呼び出す方法、および呼び出し元のオブジェクト スコープに影響します。

CLR プロパティ バインディング ソースの直接のソース値として Name を使用できません。バインディングを持つ UI の Name と同じ文字列値を表示する必要がある場合は、同じ値を Tag プロパティにレプリケートします。この値がプロパティ バインディング ソースとして使用されます。また、Name をバインド ターゲットとして使用しないでください。

メモメモ:

Name は、ElementName バインディングのソース修飾子として使用できますが、これは、Name の文字列値を直接のソースとして使用することの制限とは異なる概念です。

FindName

任意の FrameworkElement から使用できるユーティリティ メソッド FindName は、オブジェクトが現在の XAML 名前スコープに含まれている限り、オブジェクト ツリー内の Name によってオブジェクトを検索できます。FindName は、XAML で作成されたオブジェクト ツリーの全体を検索しますが、実際に検索しているのは XAML 名前スコープであり、これはツリーのメタファを保持せず、名前のハッシュ テーブルとなっています。技術的には、FindName が実際に実際に検索しているのは XAML 名前スコープであり、これはツリーのメタファを保持せず、名前のハッシュ テーブルとなっています。FindName は、適用されるテンプレートで定義されている名前を定義することはできません。

コードで名前を設定する

実行時にオブジェクトに対して Name の値を設定できますが、注意を必要とする重要な考慮事項もあります。

オブジェクトに直前の Name 値が XAML に設定されている場合、通常、実行時にコードで Name の値を変更することはお勧めしません。なぜなら、オブジェクト ツリーが読み込まれた後で名前を設定すると、等価なフィールド参照が作成されないか、その識別名が変更されないからです。最初のマークアップで Name が提供されており、フィールド参照が既に存在する場合に、Name の値を変更すると、そのフィールドは、FindName でオブジェクトを検索するために必要な名前と異なります。これは、フィールドがマークアップ定義名のままであるためです。

特定のシナリオでは、コードで作成され、XAML で定義された Name 値が指定されたことがないオブジェクトに対して Name 値を設定する必要があります。このようなシナリオの 1 つとして、FindName を共通のユーティリティ関数として使用して、XAML またはコードによって作成されたオブジェクトをツリーで見つける場合があります。これを可能にするために、Windows Phone は実行時に XAML 名前空間の概念を引き続き使用し、これに追加します。ほとんど XAML で作成された既存のオブジェクト ツリーに、新しい名前付きオブジェクトを追加しようとする場合、名前は一意である必要があります。それ以外の場合は、重複した名前の例外が発生します。インスタンス化したオブジェクトで Name を設定する場合、Name を設定しようとしても重複した名前の例外は発生しない可能性があります。重複した名前のオブジェクトをメイン オブジェクト ツリーに追加しようとするまで、新しいオブジェクトは独自の独立した XAML 名前空間を持ちます。XAML 名前空間の状態で重複した名前を検出できるのは、オブジェクトをより大きいオブジェクト ツリーに接続する瞬間のみです。ツリーでオブジェクトを接続した操作で例外が発生することがあります。たとえば、メイン オブジェクト ツリーに接続するコレクションの Add メソッドを呼び出す場合です。後で新しいオブジェクトを接続する XAML 名前空間に既に存在する Name 値を知るのは困難な場合があります。XAML 名前空間の既存の名前の完全な Hashtable を報告する専用の API はありません。コードで Name 値を幅広く設定する場合は、実行時の使用法に固有の名前文字列を生成する技法が必要になることがあります。または、重複した名前から発生することがある例外をキャッチするため、try-catch ブロックで新しく名前を付けたオブジェクトを追加する呼び出しのラップが必要になることがあります。

実行時に Name を設定できるオブジェクトは、FrameworkElement または Inline のみです。オブジェクトに Name プロパティがない場合、XAML で名前を設定するには、Name ではなく x:Name 属性の使用が必要になることがあります。このようなオブジェクトの実行時の名前に対して使用できるランタイム API はありません。

ElementName バインディング

Name または x:Name の値は、ElementName バインディングのソース要素を識別するために使用する識別子です。ElementName バインディング技法の詳細については、ElementName または「Windows Phone のデータ バインディング」を参照してください。

Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: