MAUI 应用程序在深色主题的页面更改之间闪烁白色

问题描述 投票:0回答:1

在我们的 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);
});
c# maui
1个回答
0
投票

要解决此问题,我们必须在 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是否需要这个

© www.soinside.com 2019 - 2024. All rights reserved.