我有一个控件使用某个继承的附加属性,我发现我无法在构造函数中访问该属性,这是合理的,因为在那个阶段控件不是可视树的一部分,所以它不能继承任何附加的属性。
// 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
事件?
答案 0 :(得分:1)
尽可能早在Loaded
事件处理程序中。您唯一的另一个选择是构造函数(或道德上等效的Initialized
事件),但依赖属性假设继承值的时间太早了。
另请参阅MSDN上的common object lifetime events。