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

MAUI/Xamarin中Application.Current.UserAppTheme始终返回Unspecified问题

问题分析与解决

你遇到的核心问题是Application.Current.UserAppTheme始终返回Unspecified,这通常由以下几个原因导致:

1. 未主动设置UserAppTheme的值

UserAppTheme的默认值就是Unspecified,如果应用没有在启动时或用户切换主题时主动设置这个属性,它会一直保持初始状态。

解决方式:

  • 在应用启动时(比如App.xaml.cs的构造函数中),可以将UserAppTheme设置为跟随系统主题,或者指定初始主题:
    public App()
    {
        InitializeComponent();
        // 跟随系统主题
        UserAppTheme = Application.Current.RequestedTheme;
        // 或者指定固定主题
        // UserAppTheme = AppTheme.Light;
    }
    

2. 混淆了UserAppTheme与RequestedTheme

UserAppTheme是应用级的用户自定义主题设置,而RequestedTheme是当前系统的主题(比如系统切换了深色/浅色模式)。如果你的需求是响应系统主题变更,应该监听RequestedTheme而不是UserAppTheme。

修正后的代码示例:

private void OnThemeChanged()
{
    MainThread.BeginInvokeOnMainThread(() =>
    {
        var currentTheme = Application.Current.RequestedTheme;
        if (currentTheme == AppTheme.Dark)
        {
            lbl_email.TextColor = Colors.Gray;
            lbl_appversion.TextColor = Colors.Gray;
        }
        else if (currentTheme == AppTheme.Light)
        {
            lbl_email.TextColor = Colors.Blue;
            lbl_appversion.TextColor = Colors.Blue;
        }
        else
        {
            lbl_email.TextColor = Colors.Yellow;
            lbl_appversion.TextColor = Colors.Yellow;
        }
        OnPropertyChanged();
    });
}

注:此处去掉了不必要的async修饰符,因为代码块内无异步操作

3. 主题变更事件未正确订阅

确保你已经正确订阅了主题变更事件,比如在页面的生命周期方法中处理:

protected override void OnAppearing()
{
    base.OnAppearing();
    Application.Current.RequestedThemeChanged += OnThemeChanged;
}

protected override void OnDisappearing()
{
    base.OnDisappearing();
    Application.Current.RequestedThemeChanged -= OnThemeChanged;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:43:29