DependencyProperty';中的不同行为;s RegisterAttached()和Register(
本文关键字:RegisterAttached Register DependencyProperty | 更新日期: 2023-09-27 18:25:19
我在阅读代码时发现了这个问题。搜索MSDN后,它也出现了同样的问题。
http://msdn.microsoft.com/en-us/library/ms597501.aspx对于DependencyProperty.Register方法,它有如下代码示例:
public static readonly DependencyProperty CurrentReadingProperty = DependencyProperty.Register(...);
public double CurrentReading
{
get { return (double)GetValue(CurrentReadingProperty); }
set { SetValue(CurrentReadingProperty, value); }
}
对于RegisterAttached方法http://msdn.microsoft.com/en-us/library/ms597496.aspx,它有类似的代码示例:
public static readonly DependencyProperty IsBubbleSourceProperty = DependencyProperty.RegisterAttached(....);
public static void SetIsBubbleSource(UIElement element, Boolean value)
{
element.SetValue(IsBubbleSourceProperty, value);
}
public static Boolean GetIsBubbleSource(UIElement element)
{
return (Boolean)element.GetValue(IsBubbleSourceProperty);
}
我的问题是,RegisterAttached不使用属性格式,而是使用2个静态函数。为什么?
这是因为RegisterAttached和相关的静态方法用于注册附加的属性,如Canvas.Left
,这些属性在一个类中定义,但可以在任何其他类的实例上设置(从DependencyObject派生)。例如,您可以在按钮上设置Canvas.Left
,代码如下:
Canvas.SetLeft(button, 100);
由于无法将Left
属性添加到类Button,因此需要一个静态集合方法。