0

0

Avalonia怎么在程序启动时显示一个闪屏 Avalonia SplashScreen

月夜之吻

月夜之吻

发布时间:2025-12-25 08:11:33

|

903人浏览过

|

来源于php中文网

原创

推荐使用 Ursa.Avalonia 的 SplashWindow 实现 Avalonia 启动闪屏,它支持自定义 Logo、进度条、旋转图标和状态文本,可与 MVVM 无缝集成,并提供开箱即用的生命周期管理及防闪烁优化方案。

avalonia怎么在程序启动时显示一个闪屏 avalonia splashscreen

在 Avalonia 中实现启动闪屏(Splash Screen),推荐使用 Ursa.Avalonia 提供的 SplashWindow,它专为启动阶段设计,支持自定义 Logo、进度条、旋转加载图标和状态文本,且能与 MVVM 流程自然衔接。

用 Ursa.SplashWindow 快速搭建启动页

Ursa.Avalonia 内置了开箱即用的 SplashWindow,无需手动管理窗口生命周期。只需继承并配置即可:

  • 新建一个窗口类,如 CustomSplashWindow.xaml.cs,继承 u:SplashWindow
  • 在 XAML 中添加 Logo 图片、ProgressBarTextBlock,绑定 ViewModel 的 ProgressStatusMessage
  • 确保在 App.xaml.csOnFrameworkInitializationCompleted 中调用 SplashWindow.Show(),并在主窗口准备就绪后调用 SplashWindow.Close()

控制显示时机与关闭逻辑

闪屏不能过早关闭(资源未加载完),也不能卡住不关(影响用户体验)。关键点是:

Digram
Digram

让Figma更好用的AI神器

下载
  • AppBuilder 配置阶段不直接启动主窗口,而是先显示 SplashWindow
  • 将初始化逻辑(如 DI 容器构建、配置读取、资源加载)放在后台线程或异步任务
  • 通过事件或命令通知 SplashWindow 更新进度;完成时触发 Close() 并同步打开主窗口
  • 避免在 UI 线程阻塞操作,否则会导致闪屏“假死”或闪烁异常

避免闪屏闪烁或跳动的细节

部分用户反馈闪屏“闪一下”,实际是窗口切换或重绘抖动所致,常见原因和对策:

  • 主窗口首次显示时未设置 WindowStartupLocation="CenterScreen",导致位置跳变 → 显式指定居中
  • 替换主内容(如切换 UserControl)时未重置窗口尺寸 → 改用固定大小窗口,或在切换后手动调用 LayoutManager.CalculateLayout()
  • 动图或动画控件渲染未启用双缓冲 → 对 Image 或自定义动画容器设置 RenderOptions.BitmapScalingMode="HighQuality"UseLayoutRounding="True"
  • 多屏环境下闪屏出现在错误屏幕 → 使用 Window.Position 结合 Screen.AllScreens 获取当前活动屏坐标进行定位

替代方案:纯代码轻量闪屏

若不想引入 Ursa,也可手写一个极简 SplashWindow

  • 新建普通 Window,设 WindowStyle="None"CanResize="False"ShowInTaskbar="False"
  • LoadingIcon(Ursa)或 RotateTransform + Storyboard 实现旋转动画
  • 通过 DispatcherTimer 模拟进度,或监听主线程初始化完成事件
  • 务必在 Application.MainWindow 赋值前关闭该窗口,防止两个窗口同时存在造成焦点混乱

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

462

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

462

2023.08.10

CSS position定位有几种方式
CSS position定位有几种方式

有4种,分别是静态定位、相对定位、绝对定位和固定定位。更多关于CSS position定位有几种方式的内容,可以访问下面的文章。

80

2023.11.23

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

0

2025.12.24

php框架基础知识汇总
php框架基础知识汇总

php框架是构建web应用程序的架构,提供工具和功能,以简化开发过程。选择合适的框架取决于项目需求和技能水平。实战案例展示了使用laravel构建博客的步骤,包括安装、创建模型、定义路由、编写控制器和呈现视图。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.24

Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

2

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 2.9万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号