• Style 的优先级


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

  • 相关阅读:
    测试用例设计之正交实验法
    Jmeter 添加性能监控器
    jmeter常用的性能测试监听器
    常用的性能测试策略
    nmon定位性能问题之数据库问题定位
    性能测试基础知识
    Electorn(桌面应用)自动化测试之Java+selenium实战例子
    Mybatis查询为空,但是数据库中有结果集!
    Spring中使用Mybatis逆向工程(IDEA版)
    Spring配置Quartz的三种方式
  • 原文地址:https://www.cnblogs.com/moonlight-zjb/p/4674285.html
Copyright © 2020-2023  润新知