有没有一种方法可以在 FrameworkElement 的可视父级更改时得到通知,而无需重写 OnVisualParentChanged 方法,只需使用事件?
这是使用“加载”事件的想法,但这似乎并不安全。
当视觉父级更改/更改时,是否有明确触发的事件?
有没有一种方法可以在 FrameworkElement 的可视父级更改时得到通知,而无需重写 OnVisualParentChanged 方法,只需使用事件?
这是使用“加载”事件的想法,但这似乎并不安全。
当视觉父级更改/更改时,是否有明确触发的事件?
在我的测试中,当父母发生变化时,Loaded Unloaded 确实会被解雇,所以我会说回复它们是安全的。但是,如前所述,您只能在挂钩 OnVisualParentChanged 时访问旧父级(到 _Unloaded 被称为 VisualParent 时已经为空)如果这是您所关心的,覆盖 OnVisualParentChanged 非常简单。
void _Loaded(object sender, RoutedEventArgs e)
{
DoSmthng();
}
void _Unloaded(object sender, RoutedEventArgs e)
{
DoSmthngElse();
}
protected override void OnVisualParentChanged(DependencyObject oldParent)
{
DoSmthngOther();
// Call base class to perform standard event handling.
base.OnVisualParentChanged(oldParent);
}
这与OnVisualParentChanged
. 在FrameworkElement.cs实现中,它private void TryFireInitialized()
会调用protected virtual void OnInitialized(EventArgs e)
,因此您可以在其中挂接。
这取决于您需要了解哪些信息。据我所知,唯一能得到通知父母正在改变并且能够访问旧父母的地方是 OnVisualParentChanged (旧父母作为参数传入)。否则,任何其他挂接您的地方都只能访问新的父级,因为它已经被更改了。
您可能还想调查一些继承 FrameworkElement 的类,看看它们是否公开了可以帮助您的任何其他属性或方法。