附加属性本质也是依赖属性,依赖属性的宿主位置不一样。
XAML:
1 | <Window x:Class="WpfApp1.MainWindow" |
C# Behind:
1 | namespace WpfApp1 |
运行结果:
▲ 运行结果, 两个弹窗都显示 6 没有问题
以上可见,附加属性和依赖属性保存值过程是一样的。只是用来检索值的依赖属性(附加属性)并不是以Human
为宿主,而是寄宿在School
里面,而这是没有什么关系的。因为,CLR 属性名和宿主类型只是用来生成 hash code 和 GlobalIndex 的,保证键值对唯一。
另外,既然附加属性和依赖属性本质是一样的,那么附加属性也是可以用来 Binding 的。
XAML:
1 | <Window x:Class="WpfApp1.MainWindow" |
▲ 移动两个滑条,方块会移动位置
参考: 《WPF 深入浅出》- P150