OnElementChanged(ElementChangedEventArgs<T> 何时触发?

Ian*_*ton 4 xamarin.forms

我在页面中有一个控件被推送到导航堆栈上。弹出页面后,将触发元素渲染器的 OnElementChanged。

为什么在删除元素时要这样做?为什么它渲染一个不可见的组件?

除了某些元素配置代码崩溃之外,这不会是一个问题。

EvZ*_*EvZ 5

当自定义渲染器开始执行时,第一个被触发的方法是OnElementChanged。在此方法中,您可以访问属性并执行任何自定义。

需要注意的是,此方法使用一个具有两个属性的重要参数ElementChangedEventArgs

  1. NewElement
  2. OldElement

NewElement包含对 Xamarin Forms 控件的引用。OldElement包含对 Xamarin Forms 控件附加到的渲染器的引用。请务必注意订阅取消订阅事件的两个属性,以避免内存泄漏

protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
    base.OnElementChanged(e);

    if (e.NewElement != null)
    {
        // Subscribe for events

        e.NewElement.SizeChanged += XFButtonOnSizeChanged;
    }
    else if (e.OldElement != null)
    {
        // Unsubscribe from events

        e.OldElement.SizeChanged -= XFButtonOnSizeChanged;
    }
}
Run Code Online (Sandbox Code Playgroud)

PS:通常我会分享官方文档的链接,但在这种特殊情况下,我认为领域学院有更详细的解释。