Когда я переключаю режим со светлого на темный или с темного на светлый на главной странице, режим не меняется должным образом на платформе 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
по вашему предложению, но безуспешно. Пожалуйста, проверьте скриншот ниже.
Ожидаемый интерфейс:
Текущий интерфейс:
@AlexandarMay-MSFT Мы попробовали это решение, но оно не работает.
@AlexandarMay-MSFT Мы добавили образец проекта по этому вопросу, не могли бы вы это проверить?
Какую версию .NET вы используете? Рассмотрите возможность использования .NET 8 и проверьте, работает ли он!
@AlexandarMay-MSFT мы используем .NET 7.0, и проблема возникает в симуляторе iOS. macOS версия 14.4.1
Спасибо за ваш ответ. Пожалуйста, используйте .NET 8, чтобы проверить, работает ли он.
@AlexandarMay-MSFT Мы пробовали использовать .NET 8, но он не работает.
Пожалуйста, попробуйте установить разные BGColor
в светлом и темном режиме. Если это по-прежнему не работает, следуйте этому вопросу: github.com/dotnet/maui/issues/16531 на Github.
Эта проблема исправлена и исправлена по ссылке ниже.
Эта проблема связана с github.com/dotnet/maui/issues/16531. Рассмотрите возможность обернуть
ListView
Grid
илиBorder
вместоFrame
, а затем установить цвет фона для первых.