1. 什么是附加屬性(attached property )
附加屬性依賴屬性的一種特殊形式,常見的Grid.Row,Canvas.Left都是附加屬性。
/// <summary>// 從指定元素獲取 Left 依賴項屬性的值。/// </summary>/// <param name="obj">The element from which the property value is read.</param>/// <returns>Left 依賴項屬性的值</returns>public static double GetLeft(DependencyObject obj){ return (double)obj.GetValue(LeftProperty);}/// <summary>/// 將 Left 依賴項屬性的值設(shè)置為指定元素。/// </summary>/// <param name="obj">The element on which to set the property value.</param>/// <param name="value">The property value to set.</param>public static void SetLeft(DependencyObject obj, double value){ obj.SetValue(LeftProperty, value);}/// <summary>/// 標識 Left 依賴項屬性。/// </summary>public static readonly DependencyProperty LeftProperty = DependencyProperty.RegisterAttached("Left", typeof(double), typeof(MyCanvas), new PropertyMetadata(0d));
附加屬性的簡單定義如上述代碼所示??梢钥闯龊鸵蕾噷傩圆煌牡胤皆谟跊]有作為屬性包裝器的Setter和Getter,而多了兩個靜態(tài)函數(shù)GetXXX和SetXXX。并且注冊標識符使用DependencyProperty.RegisterAttached而不是DependencyProperty.Register。
2. 附加屬性有什么作用
和依賴屬性不同的地方在于,依賴屬性是依賴對象本身的屬性,附加屬性是附加在其他對象身上的屬性,通俗來說就是在別的對象內(nèi)插入自己的屬性。上面提到的Grid.Row,就是Grid將Row屬性附加到?jīng)]有Row屬性的其它類中,以便進行布局。