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
相关产品推荐
相关产品推荐

