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

如何在自定义组件中获取MudBlazor的当前活动调色板颜色?

在MudBlazor自定义组件中同步明暗模式调色板

核心思路

通过注入MudBlazor内置的IMudThemeProvider服务,获取当前生效的主题调色板(自动区分明暗模式),并监听主题变化事件,实现组件颜色的实时同步。

具体实现步骤

1. 注入主题服务

在自定义组件顶部注入服务,并实现IDisposable接口用于后续清理:

@inject IMudThemeProvider ThemeProvider
@implements IDisposable

2. 定义变量存储当前调色板

在组件代码块中声明变量,保存当前生效的调色板及业务逻辑变量:

private Palette _currentPalette = new();
// 示例:组件业务逻辑用的数值变量
private int _targetValue = -15;

3. 初始化与主题更新逻辑

添加初始化方法获取初始调色板,并订阅主题变化事件:

protected override async Task OnInitializedAsync()
{
    await UpdateActivePalette();
    // 订阅明暗模式切换事件
    ThemeProvider.ThemeChanged += OnThemeChanged;
}

private async Task UpdateActivePalette()
{
    // 获取当前应用的自定义主题(即你配置的_myTheme)
    var currentTheme = await ThemeProvider.GetCurrentThemeAsync();
    // 根据当前模式选择对应调色板
    _currentPalette = ThemeProvider.IsDarkMode ? currentTheme.PaletteDark : currentTheme.Palette;
    // 触发组件UI更新
    StateHasChanged();
}

// 主题变化时的回调方法
private async void OnThemeChanged(object? sender, EventArgs e)
{
    await UpdateActivePalette();
}

4. 清理事件订阅

实现IDisposable接口,避免内存泄漏:

public void Dispose()
{
    ThemeProvider.ThemeChanged -= OnThemeChanged;
}

5. 在组件中使用动态调色板

结合业务逻辑(比如数值正负),直接调用_currentPalette中的颜色值:

<div style="padding: 1rem; color:@(_targetValue > 0 ? _currentPalette.Success : _currentPalette.Error)">
    当前数值:@_targetValue
</div>

关键说明

  • GetCurrentThemeAsync()会返回你在MudThemeProvider中配置的_myTheme,包含所有自定义调色板设置。
  • ThemeProvider.IsDarkMode会实时同步MainLayout中绑定的_preferences.IsDarkMode状态。
  • 明暗模式切换时,ThemeChanged事件自动触发,调用UpdateActivePalette刷新调色板与组件UI。

内容的提问来源于stack exchange,提问作者wetfield

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:30:49