[解決済み] WPFの場合、x:Name属性とName属性の違いは何ですか?
質問
と思われることがあります。
Name
と
x: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は、アクセシビリティツールや一部のテストツールで使用されています。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み] 16進数値0x00は無効な文字です。
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] AssemblyVersion、AssemblyFileVersion、AssemblyInformationalVersionの違いは何ですか?
-
[解決済み] WPFのStaticResourceとDynamicResourceの違いは何ですか?
-
[解決済み】ArrayとList<T>の比較。いつどちらを使うか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プラットフォームが同じでも「不正なフォーマットでプログラムを読み込もうとしました。
-
[解決済み] [Solved] ファイル *.mdf をデータベースとしてアタッチできない
-
[解決済み] VS2017/2015 で .xproj ファイルを開く方法
-
[解決済み] データテーブルがすでに別のデータセットに属している
-
[解決済み] AssemblyInfo.csは何に使うのですか?
-
[解決済み] WinSCP 応答待ちタイムアウト
-
[解決済み] csilogfileは何のためにあるのですか?
-
[解決済み] "SSL/TLSセキュアチャネルの信頼関係を当局と確立できませんでした "の解決方法
-
[解決済み] Microsoft.ACE.OLEDB.12.0' プロバイダがローカルマシンに登録されていません。
-
[解決済み] Math.Round(2.5)はなぜ3でなく2を返すのですか?