Dependency Property(简称DP)是WPF的核心,Style就是基于Dependency Property的,关于DP的内幕,请参见深入WPF--依赖属性。Style中的Setter就是作用在DP上的,如果你在控件中定义了一个CLR属性,Style是不能设置的。Dependency Property设计的精髓在于把字段的存取和对象(Dependency Object)剥离开,一个属性值内部用多个字段来存储,根据取值条件的优先级来决定当前属性应该取哪个字段。

  Dependency Property取值条件的优先级是(从上到下优先级从低到高):

   1: public enum BaseValueSource

   2: {

   3:     Unknown,

   4:     Default,

   5:     Inherited,

   6:     DefaultStyle,

   7:     DefaultStyleTrigger,

   8:     Style,

   9:     TemplateTrigger,

  10:     StyleTrigger,

  11:     ImplicitStyleReference,

  12:     ParentTemplate,

  13:     ParentTemplateTrigger,

  14:     Local

  15: }

  对于一个具体例子来说:

   1: <Window>

   2:     <Window.Resources>

   3:         <Style TargetType="{x:Type Button}" x:Key="ButtonStyle">

   4:             <Setter Property="Width" Value="60"/>

   5:             <Style.Triggers>

   6:                 <Trigger Property="IsMouseOver" Value="True">

   7:                     <Setter Property="Width" Value="80"/>

   8:                 </Trigger>

   9:             </Style.Triggers>

  10:         </Style>

  11:     </Window.Resources>

  12:     <Grid>

  13:         <Button x:Name="button1" Style="{StaticResource ButtonStyle}" Background="{DynamicResource brush}" Width="20"/>

  14:     </Grid>

  15: </Window>

  第4行用Style的Setter设置Width=60,这个优先级是Style;第6行当IsMouseOver为True时设置Width=80,这个优先级是StyleTrigger;第13行使用Style的Button定义Width=20,这个优先级是Local。Local具有最高的优先级,所以即使鼠标移到Button上,第6行的Trigger也会因为优先级不够高而不起作用。如果去掉了第13行中的Width=20,那么鼠标移到Button上时Width会变为80,鼠标移开后会回到第4行的设置的60来。

最新文章

  1. QQ空间/朋友圈类界面的搭建
  2. Windows Phone 8 开发系列(持续更新中)
  3. Oracle 索引创建、表分区
  4. PHP部分资料
  5. winedt设置自动显示行号[latex]
  6. SQL Server 数据库安全
  7. label标签的属性
  8. ArcGIS API for Silverlight开发入门
  9. C++,对象的 =赋值 以及 复制构造函数赋值
  10. KVM客户机使用主机USB设备
  11. 现在,以编程方式在 Electron 中上传文件,是非常简单的!
  12. 微信公众平台开发接口PHP SDK
  13. 初探arch -小白安装arch篇
  14. 网站开发进阶(二十二)HTML UI知识汇总(更新中...)
  15. 6 个开源的家庭自己主动化工具 | Linux 中国
  16. POJ 1038 Bugs Integrated, Inc.(DFS + 三进制状压 + 滚动数组 思维)题解
  17. 【Spark调优】Shuffle原理理解与参数调优
  18. BodeAbp概述
  19. mac安装VMware虚拟机(含序列号)及Ubuntu系统
  20. macOS下Hive 2.x的安装与配置

热门文章

  1. [008]new、delete及动态内存分配
  2. Models and the ServiceManager
  3. aggregation 详解3(bucket aggregation)
  4. 微信公众平台接口API
  5. ArrayBlockingQueue和LinkedBlockingQueue分析
  6. [记录]使用setTimeout实现不同时间进行切换文本的颜色
  7. Android, JSONLIB , java.lang.NoClassDefFoundError: Failed resolution of: Lnet/sf/json/JSONArray; 原因
  8. 类似微博菜单 ,用swift语言编写
  9. linux文件系统评估之inode
  10. scala中的call-by-name和call-by-value