.NET MAUI: светлый и темный режимы не обновляются должным образом на платформе iOS

Когда я переключаю режим со светлого на темный или с темного на светлый на главной странице, режим не меняется должным образом на платформе iOS, но отлично работает на платформе Android. Это означает, что на домашней странице внешний фрейм обновляется в зависимости от режима, но внутренний фрейм не обновляется в зависимости от режима. Но когда я закрываю приложение и снова открываю его, домашняя страница правильно обновляется в зависимости от режима. Ниже я добавляю скриншот проблем в обоих режимах.

Скриншоты:

Световой режим:

Темный режим:

Я использую приведенный ниже код, меняя режим.

public async void ChangetoLight(object sender, EventArgs e)
{
    try
    {
        WeakReferenceMessenger.Default.Send(new ModeChangeMessage("modechanged"));
    }
    catch (Exception exc)
    {
        System.Diagnostics.Debug.WriteLine("Exception:>>" + exc);
    }
}

public async void ChangetoDark(object sender, EventArgs e)
{
    try
    {
        WeakReferenceMessenger.Default.Send(new ModeChangeMessage("modechanged"));
    }
    catch (Exception exc)
    {
        System.Diagnostics.Debug.WriteLine("Exception:>>" + exc);
    }
}

Вышеуказанный WeakReferenceMessenger подписан на главной странице:

WeakReferenceMessenger.Default.Register<ModeChangeMessage>(this, (r, m) =>
{
    if (m.Value == "modechanged")
    {
        SetMode();
    }
});

private void SetMode()
{
    try
    {
        mode = Preferences.Default.Get("mode", "light");
        if (mode == "light")
        {
            LightMode();
        }
        else if (mode == "dark")
        {
            DarkMode();
        }
    }
    catch (Exception e)
    {
        System.Diagnostics.Debug.WriteLine("Exception:>>" + e);
        Preferences.Default.Set("mode", "light");
        mode = "light";
        LightMode();
    }
}

private void LightMode()
{
    home_layout.BackgroundColor = Colors.White;
    homelistview.BackgroundColor = Colors.White;
}

private void DarkMode()
{
    home_layout.BackgroundColor = Color.FromArgb("#434343");
    homelistview.BackgroundColor = Color.FromArgb("#434343");
}

После смены режима мы обновляем цвет homelistview и home_layout. Но, как показано на скриншоте выше, цвет не обновляется.

XAML-представление списка:

<Frame
    Grid.Row = "0"
    Style = "{StaticResource InnerFrameStyle}"
    x:Name = "home_layout">

    <ListView   
        x:Name = "homelistview"
        HasUnevenRows = "True"
        SelectionMode = "None"
        Margin = "10"
        CachingStrategy = "RecycleElement"
        ItemTapped = "HomeOptionsTapped"
        SeparatorVisibility = "None">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <ViewCell.View>
                        <Grid>
                            <Frame
                            HasShadow = "False"
                            Padding = "8"
                            CornerRadius = "{OnIdiom Phone=20, Tablet=30}"
                            BorderColor = "#bdbdbd"
                            Margin = "5"
                            BackgroundColor = "{Binding BGColor}">

                                <StackLayout 
                                VerticalOptions = "FillAndExpand"
                                Margin = "5,0,5,0"
                                Orientation = "Horizontal">

                                    <Label 
                                    Text = "{Binding Title}"
                                    HorizontalOptions = "StartAndExpand"
                                    VerticalOptions = "CenterAndExpand"
                                    TextColor = "{Binding TextColor}">
                                    </Label>

                                    <Image 
                                    Source = "{Binding ImageSource}"
                                    VerticalOptions = "CenterAndExpand"
                                    HorizontalOptions = "Start">
                                    </Image>
                                </StackLayout>
                            </Frame>
                        </Grid>
                    </ViewCell.View>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>

        <ListView.Footer>
            <Label/>
        </ListView.Footer>
    </ListView>
</Frame>

Можете ли вы предложить мне решение этой проблемы? Эта проблема существует только на платформе iOS.

Обновлять

Я создал образец проекта и загрузил его здесь. Нажмите на любую опцию и измените режим. Пользовательский интерфейс не обновляется в режиме LIVE, а обновляется при повторном открытии приложения.

Мы попробовали установить Backgroundcolor по вашему предложению, но безуспешно. Пожалуйста, проверьте скриншот ниже.

Ожидаемый интерфейс:

Текущий интерфейс:

Эта проблема связана с github.com/dotnet/maui/issues/16531. Рассмотрите возможность обернуть ListViewGrid или Border вместо Frame, а затем установить цвет фона для первых.

Alexandar May - MSFT 30.04.2024 09:58

@AlexandarMay-MSFT Мы попробовали это решение, но оно не работает.

Matthew Pans 04.05.2024 05:23

@AlexandarMay-MSFT Мы добавили образец проекта по этому вопросу, не могли бы вы это проверить?

Matthew Pans 07.05.2024 09:29

Какую версию .NET вы используете? Рассмотрите возможность использования .NET 8 и проверьте, работает ли он!

Alexandar May - MSFT 07.05.2024 13:16

@AlexandarMay-MSFT мы используем .NET 7.0, и проблема возникает в симуляторе iOS. macOS версия 14.4.1

Matthew Pans 08.05.2024 09:02

Спасибо за ваш ответ. Пожалуйста, используйте .NET 8, чтобы проверить, работает ли он.

Alexandar May - MSFT 09.05.2024 05:26

@AlexandarMay-MSFT Мы пробовали использовать .NET 8, но он не работает.

Matthew Pans 13.05.2024 11:34

Пожалуйста, попробуйте установить разные BGColor в светлом и темном режиме. Если это по-прежнему не работает, следуйте этому вопросу: github.com/dotnet/maui/issues/16531 на Github.

Alexandar May - MSFT 20.05.2024 09:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
142
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта проблема исправлена ​​и исправлена ​​по ссылке ниже.

Другие вопросы по теме