在我们的 MAUI 应用程序中,为了支持暗模式,我们将 xaml 中的所有
ContentPage
元素设置为:
BackgroundColor="{AppThemeBinding Light=White, Dark=Black}"
这是可行的,但是当更改页面时,屏幕在页面首次加载时会短暂显示白色,然后再变为黑色。白色持续约半秒,但对于使用黑暗模式的人来说显然非常迷失方向。
值得一提的是,我们没有使用以下常用方法来更改页面,因为它没有提供我们所需的灵活性:
Shell.Current.GoToAsync(nameof(MyApp.View.MyPage));
但是,在整个应用程序中,我们使用以下方法来更改页面,这可能会影响问题:
Application.Current.MainPage = new MyPage();
我们尝试修复闪烁的方法
在 App.xaml 中(这没有解决问题):
<Style TargetType="ContentPage">
<Setter Property="BackgroundColor" Value="{AppThemeBinding Light=White, Dark=Black}" />
</Style>
在 MauiProgram.cs 中(这也没有解决问题):
Microsoft.Maui.Handlers.PageHandler.Mapper.AppendToMapping(nameof(Page), (handler, view) =>
{
handler.PlatformView.SetBackgroundColor(
App.CurrentTheme == AppTheme.Dark ?
AndroidGraphics.Color.Black : AndroidGraphics.Color.White);
});
MauiProgram.cs 中的另一次尝试没有解决问题:
Microsoft.Maui.Handlers.WindowHandler.Mapper.AppendToMapping(nameof(IWindow), (handler, view) =>
{
var activity = Platform.CurrentActivity;
activity?.Window?.DecorView?.SetBackgroundColor(App.CurrentTheme == AppTheme.Dark ?
AndroidGraphics.Color.Black : AndroidGraphics.Color.White);
});
要解决此问题,我们必须在 App.Xaml.cs 中的 OnStart() 中启动应用程序时调用此方法,并且如果用户在应用程序内设置中手动更改主题,也必须调用此方法
public static void SetActivityColor()
{
#if ANDROID
var activity = Platform.CurrentActivity;
activity?.Window?.DecorView?.SetBackgroundColor(
App.CurrentTheme == AppTheme.Dark ?
Android.Graphics.Color.Black :
Android.Graphics.Color.White);
#endif
}
不确定IOS是否需要这个