17

と の間で「CodedUI テスト ビルダー」に違いはありませAutomationProperties.Namex:Name。ただし、最初のものは 2 番目のものをオーバーライドできます。また、AtomationProperties.Name はデータ バインディングをサポートしていますが、x:Nameもちろんサポートしていません。

MVVM パターンを使用している場合は、必要な場合にのみ使用することをお勧めしx:Nameます。

では、 ?AutomationProperties.Nameを優先する必要があります。x:Name

4

1 に答える 1

25

概要

x:NameAutomationProperties.Nameは 2 つのまったく異なるものであるため、「どちらを使用すべきか」という質問は誤った前提に基づいています。一般に、どちらか一方を使用することはできません。

の目的はx:Name、コード ビハインドで WPF コントロールを識別して、開発者がアクセスできるようにすることです。特定の WPF 要素をモデル化するクラスの範囲外では意味がありません (または一意ではありません)。

一方、 の目的はAutomationProperties.Name、対話のためにユーザーに提示されるダイアログまたはその他の種類のウィンドウのコンテキストでユーザー インターフェイス要素を識別することです。具体的には、その値は、ユーザーがそのユーザー インターフェイス要素の「ラベル」として認識するものと一致する必要があります (たとえば、アクセシビリティ ツールが要素の目的をユーザーに通知できるようにするため)。

どのツール (XAML コンパイラなど) もx:Nameforの値を使用することを選択できますがAutomationProperties.Name、それがあなたがすべきことであるという意味ではありません。IMHO これはまさに、2 つの違いが開発者から隠されているため、問題を引き起こす「便利さ」のタイプです。

各プロパティのセマンティックおよび技術的な側面に関する情報は、次のセクションに続きます。

x:名前

MSDN のドキュメントページでは、次のように説明されています。

x:Name がフレームワークのバッキング プログラミング モデルに適用されると、その名前は、コンストラクターによって返されるオブジェクト参照またはインスタンスを保持する変数と同等になります。

x:Name ディレクティブの使用法の値は、XAML 名前スコープ内で一意である必要があります。

[...]

XAML、部分クラス、およびコード ビハインドを使用する WPF アプリケーションの標準ビルド構成では、指定された x:Name は、XAML がマークアップ コンパイル ビルド タスクによって処理されるときに基になるコードで作成されるフィールドの名前になります。そのフィールドはオブジェクトへの参照を保持します。

上記から、次のことがわかりますx:Name

  1. 要素を保持するフィールドの名前を制御するため、(XAML ではなく) コード内の要素にアクセスするために使用されます。
  2. XAML 名前スコープ内で一意である必要があります(コード内に同じ名前の 2 つのフィールドを含めることはできないため)

AutomationProperties.Name

WPFアクセシビリティのドキュメントでは、それについて説明しています

自動化要素の名前は、開発者によって割り当てられます。Name プロパティは、画面上のラベル テキストと常に一致している必要があります。たとえば、「Browse…」というラベルを持つボタン要素の場合、名前は「Browse…」である必要があります。

于 2012-05-08T10:04:11.937 に答える