Avalonia 实现动态托盘

打印 上一主题 下一主题

主题 524|帖子 524|积分 1576

先下载一个gif图片,这里提供一个gif图片示例

在线GIF图片帧拆分工具 - UU在线工具 (uutool.cn)
使用这个网站将gif切成单张图片

创建一个Avalonia MVVM的项目,将图片copy进去

在项目文件中添加一下代码:
  1.     <ItemGroup>
  2.         <None Update="gif\*.png">
  3.             <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  4.         </None>
  5.     </ItemGroup>
复制代码
修改App.axaml.cs代码
  1. public partial class App : Application
  2. {
  3.     private static TrayIcon NotifyIcon;
  4.    
  5.     public override void Initialize()
  6.     {
  7.         AvaloniaXamlLoader.Load(this);
  8.     }
  9.     public override void OnFrameworkInitializationCompleted()
  10.     {
  11.         if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
  12.         {
  13.             desktop.MainWindow = new MainWindow
  14.             {
  15.                 DataContext = new MainWindowViewModel(),
  16.             };
  17.         }
  18.         InitializeLogo();
  19.         base.OnFrameworkInitializationCompleted();
  20.     }
  21.     private static void InitializeLogo()
  22.     {
  23.         // 初始化Icon
  24.         NotifyIcon = new TrayIcon();
  25.         // 初始图片
  26.         var size = 1;
  27.         _ = Task.Run(async () =>
  28.         {
  29.             while (true)
  30.             {
  31.                 // 添加托盘图标,
  32.                 await Dispatcher.UIThread.InvokeAsync(() =>
  33.                 {
  34.                     using var stream =
  35.                         File.OpenRead(Path.Combine(AppContext.BaseDirectory, "gif", $"{size++}.png"));
  36.                     // 定义图片的总数,达到总数从1开始继续循环
  37.                     if (size == 151)
  38.                     {
  39.                         size = 1;
  40.                     }
  41.                     return NotifyIcon.Icon =
  42.                         new WindowIcon(stream);
  43.                 });
  44.                 // 修改动态渲染速度
  45.                 await Task.Delay(40);
  46.             }
  47.         });
  48.         NotifyIcon.ToolTipText = "Logo动图测试";
  49.         NotifyIcon.IsVisible = true;
  50.     }
  51. }
复制代码
执行项目,效果如图

简单实现托盘动图,你也可以使用更好的图片,这个动图不太专业可能显示不太好看
来着token的分享

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

篮之新喜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表