我在阅读代码时发现了这个问题。搜索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和相关的静态方法用于注册attached properties(如Canvas.Left),它们在一个类中定义,但是可以在任何其他类的实例上设置(源自DependencyObject)。例如,您可以使用以下代码在Button上设置Canvas.Left

Canvas.SetLeft(button, 100);


由于无法将Left属性添加到Button类,因此需要静态设置方法。

关于c# - DependencyProperty的RegisterAttached()和Register()中的不同行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9391783/

10-11 04:34