Avalonia页面切换

Avalonia的页面切换有点反人类,本质原理是把不同页面用UserControl组件包装实现类似于Winui3 Page的效果但是Avalonia的页面切换做的并不如Winui3那样出色.

Avalonia页面切换的问题在于 :

页面的切换是需要开发者手动去创建实例的,对于开发者来说如果页面只需要简单的实例化一下再好不过,但问题在于很多页面都存在内容缓存的需求,因此不能直接实例化一个页面,而是需要给实例化的页面提供一个全局访问点,而且开发者还要保证这个全局访问点的唯一性.这个问题可以通过单例模式解决.以下为代码示例.

1.编写一个接口文件名为IPage.cs

IPage.cs源代码

using Avalonia.Controls;

namespace Test.Interfaces;

public interface IPage
{
    public static abstract UserControl GetInstance();
}

2.现在创建了一个名为ModelChat的UserControl(页面),先暂时不用管ModelChat.xaml,先修改ModelChat.cs使其符合单例模式

ModelChat.cs源代码

using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;

namespace Test.Views;

public partial class ModelChat : UserControl
{
    public ModelChat()
    {
        InitializeComponent();
    }
}

修改后代码

using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;

namespace Test.Views;

public partial class ModelChat : UserControl,IPage
{
    private static ModelChat _instance;
    private ModelChat()
    {
        InitializeComponent();
    }
    public static UserControl GetInstance() => (_instance == null) ? new ModelChat() : _instance;
}

假设现在有一个导航栏组件,当进行页面切换操作时.则可以避免直接实例化页面,保证了扩展性,避免堆一堆全局变量(屎山代码),避免出现耦合情况.

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
2 条回复 A文章作者 M管理员
  1. CBUAD

  2. 原柠科技

Slide
产品集

工坊

农业自动化

建站BOX

RNOS

小夕灯具

版权归属所有权©2024杭州软柠科技有限公司/主办上海枫汇网络科技有限公司。保留所有权利。

切换语言:/ EN

服务协议 | Cookie政策 | 服务条款 | 法律声明 | 浙ICP备2024117703号-2 | 浙公网安备33010802013612号 | 本站:沪ICP备2022008782号-7

你有新的私信

请务必要查看您的私信哟~~

×