Vincularei as cores StaticResource como BackgroundColor ao Shell (em AppShell.xaml) por meio de uma variável booleana. Minha solução não funciona. Eu sempre obtenho a BackgroundColor padrão (consulte Estilo na parte inferior). Eu nunca recebo o Yellow100 ou o Gray500 . Onde está o erro?
<Shell ...
xmlns:viewModels="clr-namespace:MyApp.ViewModels"
x:DataType="viewModels:AppShellViewModel"
BackgroundColor="{Binding IsOnline, Converter={StaticResource BoolToColorConverter}}" >
<Shell.Resources>
<ResourceDictionary>
<toolkit:IsStringNotNullOrEmptyConverter x:Key="IsStringNotNullOrEmptyConverter" />
<toolkit:BoolToObjectConverter x:Key="BoolToColorConverter" TrueObject="{StaticResource Yellow100}" FalseObject="{StaticResource Gray500}" />
</ResourceDictionary>
</Shell.Resources>
Eu também tentei usar x:TypeArguments="Color" ou x:DataType="Color"
Meu ViewModel:
public partial class AppShellViewModel : ObservableObject
{
[ObservableProperty]
private bool _isOnline;
public AppShellViewModel(ConnectionStateService connectionStateService)
{
IsOnline = connectionStateService.IsOnline();
}
}
Minhas Cores.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
<Color x:Key="Gray500">#6E6E6E</Color>
<Color x:Key="Yellow100">#F7B548</Color>
Eu tentei isso e isso funciona bem:
BackgroundColor="{StaticResource Yellow100Accent}"
Uma cor padrão é definida por meio de Style em Styles.xaml:
<Style TargetType="Shell" ApplyToDerivedTypes="True">
<Setter Property="Shell.BackgroundColor"
Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource Gray950}}" /> ...
AppShell.xaml.cs:
public partial class AppShell
{
private readonly AppShellViewModel _appShellViewModel;
public AppShell(AppShellViewModel appShellAppShellViewModel)
{
_appShellViewModel = appShellAppShellViewModel;
BindingContext = _appShellViewModel;
InitializeComponent();
Routing.RegisterRoute(nameof(FirstPage), typeof(FirstPage));
Routing.RegisterRoute(
...
} ....