2

有没有一种方法可以在 FrameworkElement 的可视父级更改时得到通知,而无需重写 OnVisualParentChanged 方法,只需使用事件?

是使用“加载”事件的想法,但这似乎并不安全。

当视觉父级更改/更改时,是否有明确触发的事件?

4

2 回答 2

3

在我的测试中,当父母发生变化时,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);
    }
于 2015-02-20T22:39:54.417 回答
1

这与OnVisualParentChanged. 在FrameworkElement.cs实现中,它private void TryFireInitialized()会调用protected virtual void OnInitialized(EventArgs e),因此您可以在其中挂接。

这取决于您需要了解哪些信息。据我所知,唯一能得到通知父母正在改变并且能够访问旧父母的地方是 OnVisualParentChanged (旧父母作为参数传入)。否则,任何其他挂接您的地方都只能访问新的父级,因为它已经被更改了。

您可能还想调查一些继承 FrameworkElement 的类,看看它们是否公开了可以帮助您的任何其他属性或方法。

于 2013-04-02T17:24:18.020 回答