5. 附加属性实践:自定义Canvas
附加属性在UWP中是一个十分重要的组成部分,很多功能都依赖于附加属性实现,典型的例子是常用的Grid和Canvas。通常附加属性有三个使用场景:插入属性、触发行为、当做缓存。可以参考以下提供的MyCanvas示例理解这三点。
5.1 插入属性
这里实现的MyCanvas继承自Panel,是一个十分简单的类(作为示例并没有十分严格的验证等代码,所以只有几十行代码),它实现了和Canvas类似的布局并且提供了Left和Right两个附加属性。使用方式如下:
<local:MyCanvas> <Rectangle local:MyCanvas.Left="50" local:MyCanvas.Top="50" Height="100" Width="100" Fill="Green" /></local:MyCanvas>
Panel最核心的代码是ArrangeOverride,简单来说,它负责定位Children中的所有元素。MyCanvas读取子元素的定位信息MyCanvas.Left和MyCanvas.Top后对其进行定位,子元素自身并没有这两个属性,只有通过附加属性插入。
public static double GetLeft(DependencyObject obj){
return (double)obj.GetValue(LeftProperty);}public static void SetLeft(DependencyObject obj, double value){
obj.SetValue(LeftProperty, value);}public static readonly DependencyProperty LeftProperty =
DependencyProperty.RegisterAttached("Left", typeof(double), typeof(MyCanvas), new PropertyMetadata(

