.net 应用主题应用

[删除(380066935@qq.com或微信通知)]

 internal class ThemeService

    {

        /// <summary>

        /// 获取当前系统主题

        /// </summary>

        /// <returns></returns>

        public AppTheme GetAppTheme()

        {

            return Application.Current!.RequestedTheme;

        }


        /// <summary>

        /// 系统主题切换

        /// </summary>

        /// <param name="handler"></param>

        public void ThemeChanged(EventHandler<AppThemeChangedEventArgs> handler)

        {

            Application.Current!.RequestedThemeChanged += handler;

        }

    }



  builder.Services.AddSingleton<ThemeService>();



 public bool IsDark { get; set; } = true;

        [Inject]

        internal ThemeService ThemeService { get; set; }


        /// <summary>

        /// 处理系统主题切换

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void HandlerAppThemeChanged(object sender, AppThemeChangedEventArgs e)

        {

            IsDark = e.RequestedTheme == AppTheme.Dark;

            InvokeAsync(StateHasChanged);

        }

        protected override async Task OnAfterRenderAsync(bool firstRender)

        {

            if (firstRender)

            {

                // 获取系统主题

                var appTheme = ThemeService.GetAppTheme();

                // 根据系统主题是否为Dark,为IsDark属性赋值

                IsDark = appTheme == AppTheme.Dark;

                ThemeService.ThemeChanged(HandlerAppThemeChanged);

                StateHasChanged();

            }

            await base.OnAfterRenderAsync(firstRender);

        }