Cores em Xamarin.Forms

A Color estrutura permite especificar cores como valores de vermelho-verde-azul (RGB), valores de matiz-saturação-luminosidade (HSL), valores de valor de saturação de matiz (HSV) ou com um nome de cor. Um canal Alfa também está disponível para indicar transparência.

Color objetos podem ser criados com os Color construtores, que podem ser usados para especificar um tom de cinza, um valor RGB ou um valor RGB com transparência. Em todos os casos, os argumentos são double valores que variam de 0 a 1.

Você também pode usar métodos estáticos para criar Color objetos:

  • Color.FromRgb para double valores RGB de 0 a 1.
  • Color.FromRgb para valores RGB inteiros de 0 a 255.
  • Color.FromRgba para double valores RGB com transparência.
  • Color.FromRgba para valores RGB inteiros com transparência.
  • Color.FromHsla para double valores HSL com transparência.
  • Color.FromHsv para double valores de HSV de 0 a 1.
  • Color.FromHsv para valores inteiros de HSV de 0 a 255.
  • Color.FromHsva para double valores de HSV com transparência.
  • Color.FromHsva para valores inteiros HSV com transparência.
  • Color.FromUint para um uint valor calculado como (B + 256 * (G + 256 * (R + 256 * A))).
  • Color.FromHex para um string formato de dígitos hexadecimais no formato "#AARRGGBB" ou "#RRGGBB" ou "#ARGB" ou "#RGB", em que cada letra corresponde a um dígito hexadecimal para os canais alfa, vermelho, verde e azul.

Depois de criado, um Color objeto é imutável. As características da cor podem ser obtidas a partir das seguintes propriedades:

  • R, que representa o canal vermelho da cor.
  • G, que representa o canal verde da cor.
  • B, que representa o canal azul da cor.
  • A, que representa o canal alfa da cor.
  • Hue, que representa o canal de matiz da cor.
  • Saturation, que representa o canal de saturação da cor.
  • Luminosity, que representa o canal de luminosidade da cor.

Todas essas propriedades são valores double que variam de 0 a 1.

Cores nomeadas

A Color estrutura também define 240 campos públicos estáticos somente leitura para cores comuns, como AliceBlue.

Color.Accent

O Color.Accent valor resulta em uma cor específica da plataforma (e às vezes selecionável pelo usuário) que é visível em um plano de fundo escuro ou claro.

Cor.Padrão

O Color.Default valor define a Color com todos os canais definidos como -1 e destina-se a impor o esquema de cores da plataforma. Consequentemente, tem um significado diferente em diferentes contextos em diferentes plataformas. Por padrão, os esquemas de cores da plataforma são:

  • iOS: texto escuro em um fundo claro.
  • Android: texto escuro em um fundo claro.
  • Windows: texto escuro em um fundo claro.

Color.Transparent

O Color.Transparent valor define a Color com todos os canais definidos como zero.

Modificar uma cor

Vários métodos de instância permitem modificar uma cor existente para criar uma nova cor:

  • AddLuminosity retorna a Color modificando a luminosidade pelo delta fornecido.
  • MultiplyAlpha retorna a Color modificando o alfa, multiplicando-o pelo valor alfa fornecido.
  • ToHex Retorna uma representação hexadecimal string de um Color.
  • WithHue retorna um Color, substituindo o matiz pelo valor fornecido.
  • WithLuminosity retorna um Color, substituindo a luminosidade pelo valor fornecido.
  • WithSaturation retorna um Color, substituindo a saturação pelo valor fornecido.

Conversões implícitas

A conversão implícita entre os Xamarin.Forms.Color tipos e System.Drawing.Color pode ser executada:

Xamarin.Forms.Color xfColor = Xamarin.Forms.Color.FromRgb(0, 72, 255);
System.Drawing.Color sdColor = System.Drawing.Color.FromArgb(38, 127, 0);

// Implicity convert from a Xamarin.Forms.Color to a System.Drawing.Color
System.Drawing.Color sdColor2 = xfColor;

// Implicitly convert from a System.Drawing.Color to a Xamarin.Forms.Color
Xamarin.Forms.Color xfColor2 = sdColor;

Exemplos

Em XAML, as cores normalmente são referenciadas usando seus valores nomeados ou com suas representações hexadecimais:

<Label Text="Sea color"
       TextColor="Aqua" />
<Label Text="RGB"
       TextColor="#00FF00" />
<Label Text="Alpha plus RGB"
       TextColor="#CC00FF00" />
<Label Text="Tiny RGB"
       TextColor="#0F0" />
<Label Text="Tiny Alpha plus RGB"
       TextColor="#C0F0" />

Observação

Ao usar a compilação XAML, os nomes de cores não diferenciam maiúsculas de minúsculas e, portanto, podem ser escritos em minúsculas. Para obter mais informações sobre a compilação de XAML, confira Compilação de XAML.

Em C#, as cores normalmente são referenciadas usando seus valores nomeados ou com seus métodos estáticos:

Label red    = new Label { Text = "Red",    TextColor = Color.Red };
Label orange = new Label { Text = "Orange", TextColor = Color.FromHex("FF6A00") };
Label yellow = new Label { Text = "Yellow", TextColor = Color.FromHsla(0.167, 1.0, 0.5, 1.0) };
Label green  = new Label { Text = "Green",  TextColor = Color.FromRgb (38, 127, 0) };
Label blue   = new Label { Text = "Blue",   TextColor = Color.FromRgba(0, 38, 255, 255) };
Label indigo = new Label { Text = "Indigo", TextColor = Color.FromRgb (0, 72, 255) };
Label violet = new Label { Text = "Violet", TextColor = Color.FromHsla(0.82, 1, 0.25, 1) };

O exemplo a seguir usa a OnPlatform extensão de marcação para definir seletivamente a cor de um ActivityIndicator:

<ActivityIndicator Color="{OnPlatform iOS=Black, Default=Default}"
                   IsRunning="True" />

Este é o código C# equivalente:

ActivityIndicator activityIndicator = new ActivityIndicator
{
    Color = Device.RuntimePlatform == Device.iOS ? Color.Black : Color.Default,
    IsRunning = true
};