web-dev-qa-db-ja.com

WPFのDataTemplateのx:Key、x:Name、およびx:UIDの違いは何ですか?

WPFで動的タブを作成しようとしています。また、一部のタブ項目にのみ適用されるコンテンツテンプレートを作成しようとしています。コンテンツテンプレートの識別子を作成して、コードビハインドで参照できるようにし、単一のTabControlの一部のタブにのみ選択的に適用できるようにしたいと考えています。ただし、これら3つの異なるxaml識別子について混乱しています。違いは何ですか、そしてどちらが私の目的に最適ですか?

29
user3685285

'x:'は名前空間を指定します。これは、ほとんどの場合 " http://schemas.Microsoft.com/winfx/2006/xaml "になります。上部にエイリアスが宣言されています。 Window.Xamlファイルの。 x:Key、x:Nameなどはすべて、その名前空間のディレクティブです。

対照的に、「名前」属性(x:なし)は、FrameworkElementクラスで宣言された依存関係プロパティです。

x:Key

XAML定義の辞書で作成および参照される要素を一意に識別します。 XAMLオブジェクト要素にx:Key値を追加することは、リソースディクショナリ(WPF ResourceDictionaryなど)でリソースを識別する最も一般的な方法です。

x:Name

XAML名前スコープでXAML定義の要素を一意に識別します。フレームワークがAPIを提供するか、実行時にXAMLで作成されたオブジェクトグラフにアクセスする動作を実装する場合、XAML名前スコープとその一意性モデルをインスタンス化されたオブジェクトに適用できます。

x:Uid

マークアップ要素の一意の識別子を提供します。多くのシナリオでは、この一意の識別子はXAMLローカリゼーションプロセスおよびツールによって使用されます。

注意事項

x:Uidは、アプリがリソースディクショナリでさまざまな言語をサポートする必要がある場合にのみ確認しました。

他の2つ(x:Keyとx:Name)の場合、基本的な経験則は、フレームワーク要素にx:Nameを使用し、x:Keyスタイル、テンプレートなどの場合。したがって、質問については、テンプレート自体に名前を付ける場合は、x:Keyディレクティブを使用します。テンプレート内で宣言されたコントロールは、x:Nameディレクティブを使用します。

すべてのXamlディレクティブの完全なリストは Xaml Namespace にあります。

38
Gayot Fow

テンプレートをページのすべてのタブに適用する場合はx:Typeを使用できますが、使用できるすべてのタブではなく少数のタブに適用する場合は- x:Key

一般に、xamlファイルでStaticResourceとして使用する場合はx:Keyを使用します。コードビハインドで参照する場合は、コントロールまたはテンプレートにx:Nameを提供します。私はX:Uidを使用したことがありませんが、これはMSDNが言うことです、

XAMLでオブジェクト要素を識別するには、x:Uidを使用します。通常、このオブジェクト要素は、UIに表示されるコントロールクラスまたは他の要素のインスタンスです。 x:Uidで使用する文字列とリソースファイルで使用する文字列の関係は、リソースファイルの文字列がx:Uidの後にドット(。)が続き、その後に要素の特定のプロパティの名前が続くことです。それはローカライズされています。

5
rajibdotnet