Цвета в Xamarin.Forms

Автор:

learn.microsoft.com

Структура Color в Xamarin позволяет задавать цвета в виде значений Red-Green-Blue (RGB), Hue-Saturation-Luminosity (HSL), Hue-Saturation-Value (HSV) или в виде имени цвета. Для обозначения прозрачности также доступен альфа-канал.

Объекты цвета можно создавать с помощью конструкторов Color, которые могут использоваться для задания оттенка серого, значения RGB или значения RGB с прозрачностью. Во всех случаях аргументами являются двойные значения в диапазоне от 0 до 1.

Для создания объектов Color можно также использовать статические методы:

  • Color.FromRgb для двойных значений RGB от 0 до 1.
  • Color.FromRgb для целых чисел в значении RGB от 0 до 255.
  • Color.FromRgba для двойных RGB-значений с прозрачностью.
  • Color.FromRgba для целых чисел в значении RGB с прозрачностью.
  • Color.FromHsla для двойных значений HSL с прозрачностью.
  • Color.FromHsv для двойных значений HSV от 0 до 1.
  • Color.FromHsv для целых чисел в значении HSV от 0 до 255.
  • Color.FromHsva для двойных значений HSV с прозрачностью.
  • Color.FromHsva для целых чисел в значении HSV с прозрачностью.
  • Color.FromUint для uint-значения, вычисляемого как (B + 256 * (G + 256 * (R + 256 * A))).
  • Color.FromHex для строкового формата шестнадцатеричных цифр в виде «#AARRGGBB» или «#RRGGBB» или «#ARGB» или «#RGB», где каждая буква соответствует шестнадцатеричной цифре для альфа-, красного, зеленого и синего каналов.

После создания объект Color является неизменяемым. Характеристики цвета можно получить из следующих свойств:

  • R - красный канал цвета.
  • G - зеленый канал цвета.
  • B - синий канал цвета.
  • A - альфа-канал цвета.
  • Hue (Оттенок) – канал оттенка цвета.
  • Насыщенность – канал насыщенности цвета.
  • Luminosity – канал яркости цвета.

Все эти свойства являются двойными значениями в диапазоне от 0 до 1.

Именованные цвета

Структура Color также определяет 240 общедоступных статических полей, доступных только для чтения, для таких распространенных цветов, как AliceBlue.

Color.Accent

Значение Color.Accent представляет собой специфический для платформы (а иногда и для пользователя) цвет, который виден на темном или светлом фоне.

Color.Default

Значение Color.Default определяет цвет, для которого все каналы установлены в -1, и предназначено для реализации цветовой схемы платформы. Соответственно, в разных контекстах на разных платформах оно имеет разное значение. По умолчанию используются следующие цветовые схемы платформ:

  • iOS: темный текст на светлом фоне.
  • Android: темный текст на светлом фоне.
  • Windows: темный текст на светлом фоне.

Color.Transparent

Значение Color.Transparent определяет цвет, все каналы которого установлены в ноль.

Изменение цвета

Несколько методов экземпляра позволяют модифицировать существующий цвет и создать новый:

  • AddLuminosity возвращает цвет, изменяя его светимость на заданную дельту.
  • MultiplyAlpha возвращает цвет, изменяя альфу, умножая ее на заданное значение альфы.
  • ToHex возвращает шестнадцатеричное строковое представление цвета.
  • WithHue возвращает цвет, заменяя оттенок на указанное значение.
  • WithLuminosity возвращает цвет, заменяя светимость указанным значением.
  • WithSaturation возвращает цвет, заменяя насыщенность указанным значением.

Неявные преобразования

Между типами Xamarin.Forms.Color и System.Drawing.Color можно выполнять неявные преобразования:

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;

Примеры

В XAML на цвета обычно ссылаются с помощью их именованных значений или их шестнадцатеричных представлений:

<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" />

Примечание. При использовании компиляции XAML имена цветов не зависят от регистра и поэтому могут быть написаны в нижнем регистре.

В C# на цвета обычно ссылаются с помощью их именованных значений или их статических методов:

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) };

В следующем примере расширение разметки OnPlatform используется для выборочной установки цвета индикатора ActivityIndicator:

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

Эквивалентный код на языке C# имеет вид:

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

Материалы по теме