前言
笔者最近在寻找合适.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
文件才知道原来主窗口实例创建在这里执行的。