WPF学习笔记6: 依赖属性设置优先级
本文主要摘录于MSDN内容
优先级按从高到低排序:
- 属性系统强制转换。强制转换和动画在本 SDK 中都作用于称为“基值”的值。便于动画不受别的设置影响。
- 活动动画或具有 Hold 行为的动画。为了获得任何实用效果,属性的动画必须优先于基(未动画)值,即使该值是在本地设置的情况下也将如此。
- 本地值。本地值可以通过“包装”属性 (Property) 的便利性进行设置,这也相当于在 XAML 中设置 Attribute 或 Property 元素,或者使用特定实例的属性调用 SetValue API。如果您使用绑定或资源来设置本地值,则每个值都按照直接设置值的优先级顺序来应用。
- TemplatedParent 模板属性。如果元素是作为模板(ControlTemplate 或 DataTemplate)的一部分创建的,则具有 TemplatedParent。在模板中,按以下优先级顺序应用:
- 来自 TemplatedParent 模板的触发器。
- TemplatedParent 模板中的属性 (Property) 集。(通常通过 XAML 属性 (Attribute) 进行设置。)
- 隐式样式。仅应用于Style属性。Style属性是由任何样式资源通过与其类型匹配的键来填充的。该样式资源必须存在于页面或应用程序中;查找隐式样式资源不会进入到主题中。
- 样式触发器。来自页面或应用程序上的样式中的触发器。(这些样式可以是显式或隐式样式,但不是来自优先级较低的默认样式。)
- 模板触发器。来自样式中的模板或者直接应用的模板的任何触发器。
- 样式 Setter。来自页面或应用程序的样式中的 Setter 的值。
- 默认(主题)样式。在默认样式中,按以下优先级顺序应用:
- 主题样式中的活动触发器。
- 主题样式中的 Setter。
- 继承。有几个依赖项属性从父元素向子元素继承值,因此不需要在应用程序中的每个元素上专门设置这些属性。
- 来自依赖项属性元数据的默认值。任何给定的依赖项属性都具有一个默认值,它由该特定属性的属性系统注册来确定。而且,继承依赖项属性的派生类具有按照类型重写该元数据(包括默认值)的选项。因为继承是在默认值之前检查的,所以对于继承的属性,父元素的默认值优先于子元素。因此,如果任何地方都没有设置可继承的属性,将使用在根元素或父元素中指定的默认值,而不是子元素的默认值。