Avalonia 实现动态托盘

简介: Avalonia 实现动态托盘

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

在线GIF图片帧拆分工具 - UU在线工具 (uutool.cn)

使用这个网站将gif切成单张图片

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

在项目文件中添加一下代码:

    <ItemGroup>
        <None Update="gif\*.png">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
    </ItemGroup>

修改App.axaml.cs代码

public partial class App : Application
{
   
   
    private static TrayIcon NotifyIcon;

    public override void Initialize()
    {
   
   
        AvaloniaXamlLoader.Load(this);
    }

    public override void OnFrameworkInitializationCompleted()
    {
   
   
        if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
        {
   
   
            desktop.MainWindow = new MainWindow
            {
   
   
                DataContext = new MainWindowViewModel(),
            };
        }
        InitializeLogo();

        base.OnFrameworkInitializationCompleted();
    }

    private static void InitializeLogo()
    {
   
   
        // 初始化Icon
        NotifyIcon = new TrayIcon();

        // 初始图片
        var size = 1;
        _ = Task.Run(async () =>
        {
   
   
            while (true)
            {
   
   
                // 添加托盘图标,
                await Dispatcher.UIThread.InvokeAsync(() =>
                {
   
   
                    using var stream =
                        File.OpenRead(Path.Combine(AppContext.BaseDirectory, "gif", $"{size++}.png"));
                    // 定义图片的总数,达到总数从1开始继续循环
                    if (size == 151)
                    {
   
   
                        size = 1;
                    }

                    return NotifyIcon.Icon =
                        new WindowIcon(stream);
                });
                // 修改动态渲染速度
                await Task.Delay(40);
            }
        });
        NotifyIcon.ToolTipText = "Logo动图测试";
        NotifyIcon.IsVisible = true;
    }
}

执行项目,效果如图

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

来着token的分享

目录
相关文章
基于C#的ArcEngine二次开发31:addin开发时调用ArcMap的进度条
基于C#的ArcEngine二次开发31:addin开发时调用ArcMap的进度条
基于C#的ArcEngine二次开发31:addin开发时调用ArcMap的进度条
Revit二次开发DockableDialog (可停靠窗体)
Revit二次开发DockableDialog (可停靠窗体)
Revit二次开发DockableDialog (可停靠窗体)
Revit 二次开发添加WPF窗口的办法
Revit 二次开发添加WPF窗口的办法
Revit 二次开发添加WPF窗口的办法
|
Web App开发 搜索推荐 C#
用WPF窗体打造个性化界面的图片浏览器
原文:用WPF窗体打造个性化界面的图片浏览器 本文使用WPF窗体(XAML及C#)与Win Form控件(FolderBrowserDialog)结合的方式, 演示制作了一个简易漂亮的WPF图片浏览器。
815 0
|
C#
WPF中桌面屏保的制作(主要代码)
原文:WPF中桌面屏保的制作(主要代码) 制作要点:(1) 使用System.Windows.Threading.DispatcherTimer;(2) 将Window属性设置为:      this.WindowState = WindowState.Maximized;      this.WindowStyle = WindowStyle.None;      this.ResizeMode = ResizeMode.NoResize;(3) 按ESC键时,关闭窗口。
827 0
|
C#
WPF 控件库——仿制Windows10的进度条
原文:WPF 控件库——仿制Windows10的进度条 一、其实有现成的   先来看看Windows10进度条的两种模式:       网上有不少介绍仿制Windows10进度条的文章,也都实现了不错的效果。
1378 0
|
XML C# 数据格式
UWP-动态磁贴
原文:UWP-动态磁贴 来自:IT追梦园 (http://www.zmy123.cn/?p=1172)   UWP应用的一大特色就是动态磁贴,所以,你的应用如果还没有设置动态磁贴,那么,和我一起来为应用加上动态磁贴吧! UWP动态磁贴可以通过消息推送实现,可以通过后台任务实现。
1357 0