次の方法で共有


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 値であることが想定されています。

注意

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

注釈

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

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

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

注意

最終的には、文字列だけでは Visual C++ コンポーネント拡張機能 (C++/CX) 型参照をサポートするには不十分です。 ソリューション エクスプローラーで [追加] / [新しい項目] / [テンプレート化されたコントロール] オプションを使用すると、Visual C++ コンポーネント拡張機能 (C++/CX) と 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"内部リソースから Style を読み込みます。

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

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

注意

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

適用対象

こちらもご覧ください