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);
}
  • 對於以 Microsoft Visual Basic 撰寫其邏輯的控制項,DefaultStyleKey 的值應該是 System.Type的實例。 您通常會在預設建構函式中設定此值:
Public Sub New()
    Me.DefaultStyleKey = GetType(CustomControl1)
End Sub
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 值不包含前置詞。

適用於

另請參閱