Avalonia中实现模态窗口弹出,不使用ReactiveUI 框架


前言

笔者最近在寻找合适.NET跨平台的客户端开发框架,网上冲浪之后发现有Avalonia,支持跨平台,之前学习了MAUI但是对Linux的适配好像还不太好,所以就没继续学下去,这不看到了Avalonia支持Linux,于是就看着官方文档学起来了,其中有一个教程是做音乐商店的,里面有个模态窗口弹出功能,用的是ReactiveUI框架,看着挺麻烦的,想着能不能用原生弹窗功能来做,然后就是漫长地查阅资料,完成后,来记录一下。


1、创建弹窗主体文件Avalonia Window

  • 项目创建使用的Avalonia模板,MVVM模式使用的是Community Toolkit MVVM工具包,在Views文件夹下创建想要作为弹窗主体的Avalonia Window,也就是下面这个文件截图
    在这里插入图片描述

2、编写主窗口按钮点击指令弹出

  • 主窗口MainWindow.axaml文件中按钮代码如下:
<Button Content="Buy Music" Command="{Binding ShowDialogCommand}"/>
  • 在主窗口对应的ViewModel中,编写按钮的点击指令,使用ShowDialog()需要传入一个Window实例,表示弹窗显示的时候会阻止该窗口的活动。这里是阻止主窗口的活动,直到弹窗关闭才可以操作;使用Show()则不需要传入任何参数,所有窗口都可以活动操作。
[RelayCommand]
void ShowDialog()
{
    //实例化窗口Window
    var dialog = new MusicStoreWindow();
    //获取主窗口的Window实例
    var desktop = App.Current.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime;
    //弹窗展示
    dialog.ShowDialog(desktop.MainWindow); // 这将使新窗口作为模态对话框打开
}

小结

小结:在做这个的时候,比较麻烦就是怎么获取主窗口的Window实例,后面看到App.axaml.cs文件才知道原来主窗口实例创建在这里执行的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值