WPF-依赖属性

WPF依赖属性

依赖属性的声名

新建一个 cs 类这个类继承一个 WPF的类 Control。声名一个静态可读属性。并使用静态构造函数对其进行注册

public static readonly DependencyProperty zhiyu;

 static Dependencey()
 {
     zhiyu = DependencyProperty.Register(
         "Value",  // 注册的 属性名称
         typeof(double),  // 注册的数据类型
         typeof(Dependencey),  //注册依赖类
         // 对这个属性的包装类
         new PropertyMetadata(  
         0.0,  // 初始值
         new PropertyChangedCallback(OnValueChanged),  // 属性发生变动时触发的方法
         new CoerceValueCallback(OnValueCoerce)),      // 强制将一个属性值设置为另一个值。 
         new ValidateValueCallback(OnValueValidation)  // 校验一个属性值是否合法
        );
 }
// 使用一个普通属性对依赖属性做包装。
 public  double Value
 {
     get => (double)this.GetValue(zhiyu);
     set
     {
         this.SetValue(zhiyu, value);
         if (value > 10000)
         {
             throw new ApplicationException("");
         }
     }
 }


 private static bool OnValueValidation(object v)
 {
     if ((double)v > 2000)
         return false;
     return true;
 }


 // IP     0-255

 private static object OnValueCoerce(DependencyObject d, object v)
 {
     if ((double)v > 255) return 255.0;
     if ((double)v < 0) return 0.0;
     return v;
 }

 private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
 {
     // 如果被调用成功,这里就将知道对应的依赖值发了生变化
 }

依赖数据中元数据入参说明

PropertyMetadata可以更替为已经成熟的影响框架属性的代码事件。这些可以使用框架定义的枚举类来定义FrameworkPropertyMetadataOptions

AffectsArrange	2	
更改此依赖属性的值会影响布局组合的排列过程。

AffectsMeasure	1	
更改此依赖属性的值会影响布局组合的测量过程。

AffectsParentArrange	8	
更改此依赖属性的值会影响父元素上的排列过程。

AffectsParentMeasure	4	
更改此依赖属性的值会影响父元素上的测量过程。

AffectsRender	16	
更改此依赖属性的值会影响呈现或布局组合的某一方面(不是测量或排列过程)。

BindsTwoWayByDefault	256	
此依赖属性上的数据绑定的 BindingMode 默认为 TwoWayInherits	32	
此依赖属性的值将由子元素继承。

Journal	1024	
此依赖属性的值应由日记记录进程或在由统一资源标识符 (URI) 导航时进行保存或存储。

None	0	
未指定任何选项;依赖属性使用 WPF 属性系统的默认行为。

NotDataBindable	128	
不允许将数据绑定到此依赖属性。

OverridesInheritanceBehavior	64	
此依赖属性的值跨越分隔的树以实现属性值继承。

SubPropertiesDoNotAffectRender	2048	
此依赖属性值上的子属性不会影响呈现的任何方面。
new FrameworkPropertyMetadata(
    Double.NaN,
    // 修改次属性影响测量和排列
    (FrameworkPropertyMetadataOptions.AffectsArrange |
      FrameworkPropertyMetadataOptions.AffectsMeasure ),
    // 属性发生变更时的回调函数
    new PropertyChangedCallback(OnCurrentReadingChanged),
    // 重新给属性赋值
    new CoerceValueCallback(CoerceCurrentReading)
);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值