xamarin.forms.shell 框架中页面上视觉元素的生命周期

Posted

技术标签:

【中文标题】xamarin.forms.shell 框架中页面上视觉元素的生命周期【英文标题】:Lifetime of visual elements on a page in a xamarin.forms.shell framework 【发布时间】:2021-01-09 20:32:24 【问题描述】:

当您导航到另一个页面时,内容页面、shell 应用程序中的可视元素会发生什么变化?

根据构造函数仅在首次显示时调用而不是在随后再次导航回页面时判断,特定页面似乎仍然存在,但似乎内容页面上的一些/所有视觉元素在导航时被刷新返回页面。

这是我在页面上放置 forms.map 或 syncfusion.sfmap 并离开页面然后返回时看到的具体情况。地图显然会在重新加载时重置为初始值,因此它们显然被杀死并重新创建。为地图制作自定义渲染器会显示 OnElementChanged 在重新加载时被调用,这也表明它不是“随时待命”以等待页面重新加载。

似乎封装了更深层次的控件的表单类确实存在,但它们与较低级别的控件断开连接,并在再次可见时重新加载它们?我对移动开发有点陌生,可能会也可能不会错过这里的全部要点......

真正的问题是我是否可以避免这种行为。我有一个外壳应用程序,其中包含包含地图的各种页面。这些地图填充了各种图形对象,并且正在平移和缩放,因此在短暂离开页面时将它们重置是一件非常痛苦的事情。有没有办法避免这种情况,所以当页面再次显示时它们会迅速恢复活力?

【问题讨论】:

您好,我不确定导航到另一个页面时是否所有视觉元素都会重置。但如果出现这种现象,最好在离开当前页面时保存视觉元素的状态,返回时恢复。从软件性能的角度来看,会降低CPU/GPU的使用率。 【参考方案1】:

我们已经分析了查询,我们想通知不仅地图控件,简单的 ContentPage 也这样做。它会破坏旧页面并在导航返回时重新创建页面视图。

【讨论】:

以上是关于xamarin.forms.shell 框架中页面上视觉元素的生命周期的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Forms Shell 不在详细信息页面上显示菜单栏

在 Xamarin.Forms Shell 中隐藏 tabbedPage 的标题

Xamarin.Forms Shell 如何在路由导航中向字符串注入多个不同的值

Xamarin.Forms Shell:有没有办法使用 GoToAsync 和 Routing 导航到选项卡,并在那里推送页面

Xamarin.Forms Shell 在汉堡菜单中将 Flyout Menu 与 MenuItem 组合并排序

Xamarin.Forms.Shell:如何获取底部 TabBar 高度?