【问题标题】:Xamarin forms view optimization when IsVisible=false当 IsVisible=false 时 Xamarin 形成视图优化
【发布时间】:2020-01-10 10:49:08
【问题描述】:

我正在寻找最佳实践,以便在切换布局的可见性时优化 Xamarin Forms 应用程序,以便在调整屏幕大小时显示它们。如果 IsVisible=false,Xamarin Forms 会加载任何布局。所以,我想要优化我的应用程序是,当IsVisible=True 加载布局,如果它变成False,有没有办法“卸载”它,所以它不会占用太多设备内存?因为UWP没有问题,但是内存低的手机也有。

假设我有下一个代码:

    <StackLayout IsVisible="False" Orientation="Vertical">
        <!-- Make it visible when small screen -->
        <CustomView1></CustomView1>
        <CustomView2></CustomView2>
    </StackLayout>

    <StackLayout IsVisible="True" Orientation="Horizontal">
        <!-- Make it NON visible when small screen -->
        <CustomView1></CustomView1>
        <CustomView2></CustomView2>
    </StackLayout>

Xamarin 将加载相同的视图 2 次。我在 web 中看起来像,将它从 DOM 中删除(或者在它可见之前不要在 DOM 中加载它),但是对于 Xamarin Forms。因此,该应用在不需要时不会加载视图,并且我希望在运行时在窗口应用调整大小时拥有它。

PS:可以通过使用 OnIdiom.Phone、OnIdiom.Tablet 和 OnIdiom.Desktop 来完成,但最后,如果 UWP 窗口应用程序调整大小,我将无法获得所需的视图。

【问题讨论】:

  • 嗨,Esteban 您的示例代码正是您想要呈现的吗?布局内的视图完全相同但方向不同?还是只是简单的伪代码使您的问题更易于阅读?如果是前者 - 您可以在代码中绑定方向属性。首次加载页面时,使用 Essentials.DeviceInfo 类获取宽度和高度并设置适合屏幕大小的方向。对于 UWP,在窗口调整大小时添加一个侦听器,并在需要时更改方向。如果这是你想要的,我会用代码 sn-ps 添加一个答案。
  • 我一直在寻找的是 ControlTemplate 的使用,查看这篇文章:xamboy.com/2019/01/18/using-control-templates-in-xamarin-formsAdam,它是伪代码,是的。这与方向无关,但我认为控制模板可以满足我的需求
  • 在您的情况下,您可以在后面的代码中绑定 IsVisible 的值并在运行时更改它。

标签: xamarin xamarin.forms responsive-design


【解决方案1】:

您可以定义普通屏幕、大屏幕等的视觉状态,它们将根据当前状态显示或不显示:

使用可视状态管理器对 XAML 元素进行更改,基于 由代码设置的视觉状态。

视觉状态管理器 (VSM) 是 Xamarin.Forms 3.0 中的新功能。 VSM 提供了一种结构化的方式来对用户界面进行视觉更改 从代码。在大多数情况下,应用程序的用户界面是 在 XAML 中定义,并且此 XAML 包括描述如何 视觉状态管理器会影响用户界面的视觉效果。

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/visual-state-manager

【讨论】:

    【解决方案2】:

    您可以使用控制模板在运行时更改视图/页面的外观。如果您想根据上下文重新设置页面主题或在视图之间切换,这将很有帮助。允许设置控件模板的属性称为 ControlTemplate,它在 ContentPage 和 ContentView 类中可用。

    参考: https://www.xamboy.com/2019/01/18/using-control-templates-in-xamarin-forms/

    【讨论】:

    • 运行时 IsVisible 更改为 false 是否会导致视图卸载或在自定义控件中处理?我也遇到过类似的问题,想知道你的方法。
    • 没有任何原因导致卸载。我的意思是我不需要一些视图来加载他们的内容。通过使用控件模板,您可以在不更改内容的情况下更改视图的外观。检查我的答案链接。有用。直到 2 天,我才能将其设置为最终答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2019-01-04
    • 2017-09-24
    • 2012-01-28
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多