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 值。

注意

(C++/CX) Visual C++ 元件延伸模組會使用類型限定名稱的字串。 但這取決於產生的程序代碼,此程式代碼會在 XAML 編譯程式存取之後產生 TypeName ;請參閱。

備註

DefaultStyleKey 是 Windows 執行階段 API 中少數受保護的屬性之一。 它僅供控件作者使用,這些作者將子類別化某些現有的控件類別,因此必須有設定此屬性的必要存取權。 對於您將設定 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 表單中,樣式實際上是以類型為索引鍵,即使 Windows 執行階段 XAML 中沒有明確定義類型參考的機制也一樣。 但是,對於任何 TargetType 值而言,這是保存查閱索引鍵的屬性,它會隱含地假設以字串形式表示類型參考。 例如, Button 的 DefaultStyleKey 是 System.Type 實例, 其中 Name 是 “Button”, FullName 是 “Windows.UI.Xaml.Controls.Button”。 系統會使用這項資訊,從具有TargetType="Button"的內部資源載入 Style

自定義控制項通常不在預設 XAML 命名空間中。 相反地,它們位於具有 using: 語句的 XAML 命名空間中,用來參考應用程式的程式代碼命名空間。 根據預設,專案會建立前置詞 「local:“,為您對應此命名空間。 您也可以對應其他 XAML 命名空間,以參考控制件的其他程式碼命名空間,或應用程式所定義的其他程式代碼。

“local:” 前置詞 (或對應至您應用程式程式代碼和命名空間的其他命名空間,) 在 XAML 中做為 TargetType 值時,應該在自定義控件的名稱前面。 這也會由起始範本為您完成;當您新增控件時,您會看到只包含一個樣式的 generic.xaml 檔案。 該樣式會有 TargetType 值,其字串開頭為 “local:”,並以您為自定義控件類別選擇的名稱來完成。 若要比對先前在定義中 CustomControl1 設定 DefaultStyleKey 的範例,您會看到元素定義 <Style TargetType="local:CustomControl1"> 於起始 generic.xaml 中,而且該樣式會定義控件範本,以及設定其他屬性。

注意

“local:” 前置詞會隔離至其定義及使用所在的 XAML。 XAML 命名空間和前置詞在 XAML 中只有意義,而且每個 XAML 檔案都是獨立的。 程序代碼中的 DefaultStyleKey 值不包含前置詞。

適用於

另請參閱