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 默认为 TwoWay。
Inherits 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)
);