You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Avalonia 11.3中如何根据系统主题切换托盘图标

Avalonia 11.3 系统主题切换时动态修改托盘图标

完整实现方案

1. 调整App.axaml中的托盘图标声明

无需额外添加x:Name,保持简洁结构即可(注意替换为你实际的资源路径):

<Application xmlns="https://github.com/avaloniaui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="AppName.App">
    <Application.Styles>
        <FluentTheme Mode="Auto" />
    </Application.Styles>

    <TrayIcon.Icons>
        <TrayIcons>
            <TrayIcon Icon="avares://AppName/Assets/icon_light.png" ToolTipText="Foo Bar">
                <TrayIcon.Menu>
                    <!-- 按需添加菜单内容 -->
                </TrayIcon.Menu>
            </TrayIcon>
        </TrayIcons>
    </TrayIcon.Icons>
</Application>

2. 在App.axaml.cs中实现逻辑

通过Application内置的TrayIcon.Icons集合获取实例,绑定主题切换事件完成图标替换:

using Avalonia;
using Avalonia.Controls;
using Avalonia.Styling;
using System.Linq;

namespace AppName;

public partial class App : Application
{
    private TrayIcon? _trayIcon;

    public override void Initialize()
    {
        InitializeComponent();
        // 注册主题变更事件
        ActualThemeVariantChanged += OnThemeChanged;
    }

    public override void OnFrameworkInitializationCompleted()
    {
        base.OnFrameworkInitializationCompleted();
        // 从托盘图标集合中获取目标实例
        _trayIcon = TrayIcon.Icons?.OfType<TrayIcon>().FirstOrDefault();
    }

    private void OnThemeChanged(object? sender, ActualThemeVariantChangedEventArgs e)
    {
        if (_trayIcon == null) return;

        // 根据当前主题切换对应图标
        _trayIcon.Icon = e.NewThemeVariant == ThemeVariant.Dark
            ? new WindowIcon("avares://AppName/Assets/icon_dark.png")
            : new WindowIcon("avares://AppName/Assets/icon_light.png");
    }
}

关键细节说明

  • 实例获取逻辑:TrayIcon.Icons是TrayIcons类型的专属集合,直接通过OfType<TrayIcon>()筛选后取第一个元素即可拿到目标实例,无需依赖视觉树查找。
  • 主题判断:ActualThemeVariantChangedEventArgs.NewThemeVariant会返回当前系统的主题枚举值(ThemeVariant.Dark/ThemeVariant.Light),据此精准切换图标。
  • 资源配置:确保图标文件的属性设置为AvaloniaResource,否则avares://路径无法正确访问资源。

内容的提问来源于stack exchange,提问作者lak-b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 10:16:12