ToB企服应用市场:ToB评测及商务社交产业平台

标题: Avalonia 实现动态托盘 [打印本页]

作者: 篮之新喜    时间: 2023-2-3 09:38
标题: Avalonia 实现动态托盘
先下载一个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的分享

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




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4