在控件生命周期的哪个阶段,它可以访问继承的附加属性吗?

时间:2012-07-17 06:56:19

标签: c# wpf dependency-properties attached-properties object-lifetime

我有一个控件使用某个继承的附加属性,我发现我无法在构造函数中访问该属性,这是合理的,因为在那个阶段控件不是可视树的一部分,所以它不能继承任何附加的属性。

// Constructor
public MyClassName()
{
    InitializeComponent();

    MyValue value = DeclaringClass.GetMyAttachedProperty(depObj); // value == null
}

当我在Loaded事件期间尝试访问该属性时,我能够检索该值:

// Constructor
public MyClassName()
{
    InitializeComponent();

    Loaded += OnLoaded;
}

void OnLoaded(object sender, RoutedEventArgs e)
{
    Loaded -= OnLoaded;

    MyValue value = DeclaringClass.GetMyAttachedProperty(depObj); // value != null

    // Do something with value
}

所以这让我想到了一个问题 - 控件生命周期中最早可以访问继承附加属性的阶段是什么?是否有更好的地方可以代替Loaded事件?

1 个答案:

答案 0 :(得分:1)

尽可能早在Loaded事件处理程序中。您唯一的另一个选择是构造函数(或道德上等效的Initialized事件),但依赖属性假设继承值的时间太早了。

另请参阅MSDN上的common object lifetime events