Xamarin.forms OneElementChanged(ElementChangedEventArgs<;T>;火灾)何时更改?
我在一个推到导航堆栈上的页面中有一个控件。页面弹出后,元素的呈现程序的OnElementChanged被激发 为什么在移除元素时它会这样做?为什么它会渲染一个不可见的组件Xamarin.forms OneElementChanged(ElementChangedEventArgs<;T>;火灾)何时更改?,xamarin.forms,Xamarin.forms,我在一个推到导航堆栈上的页面中有一个控件。页面弹出后,元素的呈现程序的OnElementChanged被激发 为什么在移除元素时它会这样做?为什么它会渲染一个不可见的组件 除了某些元素配置代码崩溃之外,这不会是一个问题。当自定义渲染器开始执行时,第一个触发的方法是OnElementChanged。在该方法中,您可以访问属性并执行任何自定义 注意,此方法使用一个名为ElementChangedEventArgs的重要参数,该参数具有两个属性 NewElement OldElement NewEle
除了某些元素配置代码崩溃之外,这不会是一个问题。当自定义渲染器开始执行时,第一个触发的方法是
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;
}
}
附言:通常我共享一个指向的链接,但在这种情况下,我认为有更详细的解释。我明白了。这是为了清理。