Control.DefaultStyleKey プロパティ

定義

コントロールの既定のスタイルを参照するキーを取得または設定します。 カスタム コントロールの作成者は、このプロパティを使用して、コントロールが使用するスタイルの既定値を変更します。

protected:
 property Platform::Object ^ DefaultStyleKey { Platform::Object ^ get(); void set(Platform::Object ^ value); };
IInspectable DefaultStyleKey();

void DefaultStyleKey(IInspectable value);
protected object DefaultStyleKey { get; set; }
Protected Property DefaultStyleKey As Object

プロパティ値

Object

Platform::Object

IInspectable

コントロールの既定のスタイルを参照するキー。 テーマ スタイルの参照の一部として正しく動作するには、この値は System.Type 値であることが期待されます。

Note

C++ は、型の修飾名である文字列を使用します。 ただし、これは、XAML コンパイラによってアクセスされると TypeName を生成する生成されたコードに依存します。「解説」を参照してください。

注釈

DefaultStyleKey は、Windows ランタイム API のごく少数の保護されたプロパティの 1 つです。 これは、既存のコントロール クラスをサブクラス化するため、このプロパティを設定するために必要なアクセス権を持つコントロール作成者のみが使用することを目的としています。 DefaultStyleKey を設定する多くのカスタム コントロール シナリオでは、 OnApplyTemplate もオーバーライドします。

DefaultStyleKey の戻り値の型は、構文では Object として緩やかに型指定されますが、XAML スタイル システムでは、値が型参照を提供することを想定しています。

  • C# で記述されたロジックを持つコントロールの場合、DefaultStyleKey の値は System.Type のインスタンスである必要があります。 通常、この値は既定のコンストラクターで設定します。
public CustomControl1()
{
    this.DefaultStyleKey = typeof(CustomControl1);
}
  • C++ で記述されたロジックを持つコントロールの場合、DefaultStyleKey の値は、カスタム コントロール クラスの名前である名前空間修飾文字列である必要があります。 通常、この値は既定のコンストラクターで設定します。
CustomControl1::CustomControl1() // public: in the header.
{
	DefaultStyleKey(winrt::box_value(L"App1.CustomControl1"));
}

Note

最終的には、文字列だけでは C++ 型参照をサポートするには不十分です。 ソリューション エクスプローラーで [追加] / [新しい項目] / [テンプレート化されたコントロール] オプションを使用すると、C++ と XAML のテンプレートとサポートによって、IXamlMetadataProvider 情報を提供するクラスが生成されます。 XAML コンパイラは、XAML が読み込まれるときにこのコードにアクセスし、それを使用して型とメンバーを検証および作成し、部分クラスに参加させることができます。 独自のアプリ コードで定義する限り、文字列は必要なすべてです。 しかし、興味がある場合は、XamlTypeInfo.g.h と生成されたXamlTypeInfo.g.cppファイルを確認できます。

コントロールの作成者は DefaultStyleKey の値を指定しないことを選択できますが、これは一般的ではありません。 結果として、既定のスタイルは基底クラスで定義されているスタイルになります。 場合によっては ( ContentControl の場合など)、値が null になります。 値を再定義しない場合でも、元の既定のスタイルがコントロールのレンダリングに役立つことを確認してください。

XAML コントロールが読み込まれると、レンダリング プロセスが開始され、適用する正しいテンプレートがシステムによって検索されます。読み込まれるのは、そのテンプレートを含むコントロールの XAML 既定のスタイルです。 Windows ランタイムに含まれるのは、Windows ランタイムが定義するすべての XAML コントロールのすべての既定のスタイルの内部コピーです。 DefaultStyleKey の型参照は、このスタイルとして読み込む XAML リソースという名前をシステムに指示します。 XAML 形式では、型参照を明示的に定義するメカニズムが XAML に存在しない場合でも、スタイルは実際には型によってキー付けWindows ランタイム。 ただし、検索のキーを保持する属性である TargetType 値の場合、暗黙的に文字列の形式で型参照を表していると見なされます。 たとえば、Button の DefaultStyleKey は System.Type インスタンスで、名前は "Button" で、FullName は "Windows。UI。Xaml.Controls.Button"。 システムは、この情報を使用して、TargetType="Button"を持つ内部リソースからスタイルを読み込みます。

カスタム コントロールは、通常、既定の XAML 名前空間に含まれません。 代わりに、アプリのコード名前空間を参照する using: ステートメントを持つ XAML 名前空間にあります。 既定では、プロジェクトでは、この名前空間をマップするプレフィックス "local:" が作成されます。 また、他の XAML 名前空間をマップして、アプリで定義されているコントロールやその他のコードの追加のコード名前空間を参照することもできます。

"local:" プレフィックス (またはアプリのコードと名前空間にマップされるその他の名前空間) は、カスタム コントロールが TargetType 値として XAML にあるときに、その名前の前に置く必要があります。 これは、開始テンプレートによって既に行われています。新しいコントロールを追加すると、1 つのスタイルのみを含む generic.xaml ファイルが表示されます。 このスタイルには 、TargetType 値が "local:" で始まり、カスタム コントロール クラスに対して選択した名前で完了する文字列が含まれます。 CustomControl1定義で DefaultStyleKey を設定した前の例と一致させるために、開始 generic.xaml で定義<Style TargetType="local:CustomControl1">の要素が表示され、そのスタイルによってコントロール テンプレートが定義され、他のプロパティが設定されます。

Note

"local:" プレフィックスは、定義されて使用される XAML に分離されます。 XAML 名前空間とプレフィックスは XAML 内でのみ意味を持ち、各 XAML ファイルには自己完結型です。 コード内の DefaultStyleKey 値にはプレフィックスは含まれません。

適用対象

こちらもご覧ください