Temas em C#

Todas as plataformas suportadas pelo .NET MAUI oferecem suporte para modos claro e escuro. É essencial ter isto em conta no design das aplicações para proporcionar a melhor experiência ao utilizador final. O pacote de Marcação C# oferece a capacidade de definir valores de propriedades que serão trocados com base no tema atual do sistema (consulte a documentação Microsoft).

Existem duas formas de definir os valores do tema da app:

1. Num caso específico BindableObject

Ao construir a interface de utilizador de uma aplicação com C#, é possível definir os valores para o modo claro e escuro com o AppThemeBinding método de extensão.

O exemplo seguinte mostra como criar um Label com o seguinte:

  1. Defina a Text propriedade para mostrar "Modo Claro" quando o sistema estiver em modo claro e "Modo Escuro" quando a aplicação estiver em modo escuro.
  2. Defina a TextColor propriedade para Colors.Black quando o sistema está em modo claro e Colors.White quando a aplicação está em modo escuro.
new Label()
    .AppThemeBinding(Label.TextProperty, "Light Mode", "Dark Mode")
    .AppThemeColorBinding(Label.TextColorProperty, Colors.Black, Colors.White);

2. Em Style

É normalmente recomendado criar um Style que se possa aplicar a múltiplas instâncias de um controlo e, assim, simplificar o código necessário para construir a interface de utilizador de uma aplicação. Para este fim, existem métodos disponíveis na classe Style<T>AppThemeBinding.

O exemplo seguinte mostra como criar um Style para um Label que tenha o mesmo comportamento do exemplo anterior:

  1. Defina a Text propriedade para mostrar "Modo Claro" quando o sistema estiver em modo claro e "Modo Escuro" quando a aplicação estiver em modo escuro.
  2. Defina a TextColor propriedade para Colors.Black quando o sistema está em modo claro e Colors.White quando a aplicação está em modo escuro.
var labelStyle = new Style<Label>()
    .AddAppThemeBinding(Label.TextProperty, "Light Mode", "Dark Mode")
    .AddAppThemeBinding(Label.TextColorProperty, Colors.Black, Colors.White);

new Label
{
    Style = labelStyle
};