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 中为数不多的受保护属性之一。 它仅供控件作者使用,他们将对某些现有控件类进行子类化,因此具有设置此属性所需的访问权限。 对于许多要设置 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 实例,名称 为“Button”, FullName 为“Windows.UI.Xaml.Controls.Button”。 系统使用此信息来了解从具有 TargetType="Button"的内部资源加载样式

自定义控件通常不在默认 XAML 命名空间中。 相反,它们位于 XAML 命名空间中,该命名空间具有 using: 语句来引用应用的代码命名空间。 默认情况下,项目创建前缀“local:”,用于映射此命名空间。 还可以映射其他 XAML 命名空间,以引用控件或应用定义的其他代码的其他代码命名空间。

当自定义控件在 XAML 中作为 TargetType 值时,“local:”前缀 (或其他一些映射到应用代码和命名空间的命名空间) 应位于自定义控件的名称之前。 启动模板也已为你完成此操作;添加新控件时,会看到仅包含一个样式的 generic.xaml 文件。 该样式将具有 TargetType 值,该值是一个以“local:”开头的字符串,由为自定义控件类选择的名称完成。 为了匹配前面在定义中 CustomControl1 设置 DefaultStyleKey 的示例,你将在 starting generic.xaml 中看到定义的 <Style TargetType="local:CustomControl1"> 元素,该样式定义控件模板以及设置其他属性。

注意

“local:”前缀与定义和使用它的 XAML 隔离。 XAML 命名空间和前缀仅在 XAML 中有意义,并且对于每个 XAML 文件都是自包含的。 代码中的 DefaultStyleKey 值不包括前缀。

适用于

另请参阅