Avalonia 實現動態托盤

tokengo發表於2023-02-02

先下載一個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的分享

相關文章