1. ホーム
  2. .net

[解決済み] WPFの場合、x:Name属性とName属性の違いは何ですか?

2022-03-15 15:45:16

質問

と思われることがあります。 Namex:Name 属性は互換性があります。

では、両者の決定的な違いは何でしょうか。また、どのような場合にどちらかを使うことが望ましいのでしょうか。

間違った方法で使用した場合、パフォーマンスやメモリに影響がありますか?

どのように解決するのですか?

XAMLでは、本当に1つの名前しかありません。 x:Name . WPFのようなフレームワークは、オプションでそのプロパティの1つをXAMLの x:Name を使用することで RuntimeNamePropertyAttribute を使用すると、クラスのプロパティの1つを XAML の x:Name 属性にマッピングするように指定することができます。

このようにしたのは、WPFのように実行時に"Name"という概念をすでに持っているフレームワークに対応させるためです。WPFでは、たとえば FrameworkElement は、Nameプロパティを導入しています。

一般的に、クラスは x:Name を使用することができます。すべて x:Name XAMLが意味するのは、クラスの背後にあるコードに値を格納するためのフィールドを生成することです。ランタイムがそのマッピングで何をするかは、フレームワークに依存します。

では、同じことをするのになぜ2つの方法があるのでしょうか?答えは簡単で、1つのプロパティに2つの概念がマッピングされているからです。WPFは、実行時に保存される要素の名前を必要とし(これは、特にBindによって使用可能です)、XAMLは、クラスの背後にあるコードのフィールドによってアクセスされたい要素を知っておく必要があります。WPFは、Nameプロパティをx:Nameのエイリアスとしてマークすることで、これら2つを結びつけます。

将来的には、XAMLでは他のオブジェクトを名前で参照してプロパティを設定できるようにするなど、x:Nameの用途が増える予定ですが、3.5以前では、フィールドを作成するためにのみ使用されます。

どちらを使うべきかは、技術的な問題ではなく、本当にスタイルの問題です。その点は、他の方の推薦に譲りたいと思います。

こちらもご覧ください オートメーションプロパティ.名前 VS x:名前 AutomationProperties.Nameは、アクセシビリティツールや一部のテストツールで使用されています。