Xamarin.forms OneElementChanged(ElementChangedEventArgs<;T>;火灾)何时更改?

Xamarin.forms OneElementChanged(ElementChangedEventArgs<;T>;火灾)何时更改?,xamarin.forms,Xamarin.forms,我在一个推到导航堆栈上的页面中有一个控件。页面弹出后,元素的呈现程序的OnElementChanged被激发 为什么在移除元素时它会这样做?为什么它会渲染一个不可见的组件 除了某些元素配置代码崩溃之外,这不会是一个问题。当自定义渲染器开始执行时,第一个触发的方法是OnElementChanged。在该方法中,您可以访问属性并执行任何自定义 注意,此方法使用一个名为ElementChangedEventArgs的重要参数,该参数具有两个属性 NewElement OldElement NewEle

我在一个推到导航堆栈上的页面中有一个控件。页面弹出后,元素的呈现程序的OnElementChanged被激发

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


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

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

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

  • NewElement
  • 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;
        }
    }
    
    protected override void OnElementChanged(ElementChangedEventArgs e)
    {
    基础。一个要素发生变化(e);
    if(例如NewElement!=null)
    {
    //订阅活动
    e、 NewElement.SizeChanged+=xfButtonNonSizeChanged;
    }
    else if(e.OldElement!=null)
    {
    //取消订阅活动
    e、 OldElement.SizeChanged-=XFButtonNonSizeChanged;
    }
    }
    

    附言:通常我共享一个指向的链接,但在这种情况下,我认为有更详细的解释。

    我明白了。这是为了清理。