3

我想在我的Maui Blazor应用程序中实现明暗主题。如您所知,Blazor 只不过是 Html 和 Css,因此我可以轻松地为我的应用程序内容实现深色和浅色主题(感谢在 html 标签上添加的简单.dark类)。

我面临的问题是毛伊岛应用程序的上部和下部。

让我通过一个例子来告诉你。

安卓版

在此处输入图像描述

iOS版

在此处输入图像描述

上面的图片向您展示了当前的情况:左侧为浅色主题,右侧为深色主题。如您所见,深色主题对于顶部和底部是有问题的(只有顶部对于 iOS 版本是有问题的)。

我想实现的目标:顶部和底部的颜色应与页面内容相同:

  • #292929为黑暗主题
  • #FFFFFF用于 Light 主题

如下图所示:当切换到深色主题时,一切都是彩色的。

我不知道如何为 Maui Blazor 实现这一目标,我也没有使用 Xamarin 的经验。

你能指出我正确的方向吗?

在此处输入图像描述

您可能知道,BlazorWebView使您能够直接在 .NET MAUI 应用程序中托管 Blazor Web 应用程序。

在此处输入图像描述

4

1 回答 1

0

在接下来的一两个月内,应该可以通过MAUI 社区工具包StatusBarEffectNavigationBarEffect在其中做到这一点。此处讨论- 针对 Xamarin 工具包。

这些效果目前xamarin.developXamarin.Community.Toolkit. 更改也将合并到 Maui Toolkit,不确定具体时间。

下面是基于该源代码,适用于 MAUI。经测试。

安卓:

public class MainActivity : MauiAppCompatActivity
{
    protected override void OnCreate(Android.OS.Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        SetColors();
    }

    private void SetColors()
    {
        if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop) {
            // Aqua.
            var color = Microsoft.Maui.Graphics.Color.FromRgb(0, 255, 255);
            // The thin bar at top of Android screen.
            Window.SetStatusBarColor(color.ToNative());
            // The thicker bar at bottom of Android screen.
            Window.SetNavigationBarColor(color.ToNative());

        }
    }

}

这会在应用程序启动时设置颜色。效果将包含动态设置这些颜色所需的额外逻辑。(在这些效果存在之前,您可以在持久存储中保存一个值,强制您的应用重新启动,读回该标志以了解要应用什么颜色。或者您可以在 Android 中创建一个依赖服务,从 X-Forms 代码中调用。将需要使用Device.BeginInvokeOnMainThread。)


IOS:

...待定...

设置状态栏颜色可以在ShaXam/iOS/StatusBarStyleManager/中看到。

基本线是这些(我认为):

UIApplication.SharedApplication.SetStatusBarStyle(UIStatusBarStyle.DarkContent, false);
            
GetCurrentViewController().SetNeedsStatusBarAppearanceUpdate();

iOS - 未经测试。

于 2021-12-10T03:03:06.237 回答