Поделиться через


Цвета в Xamarin.Forms

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

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

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

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

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

  • R, представляющий красный канал цвета.
  • G, представляющий зеленый канал цвета.
  • B, представляющий синий канал цвета.
  • A, представляющий альфа-канал цвета.
  • Hue, представляющий канал оттенка цвета.
  • Saturation, представляющий канал насыщенности цвета.
  • Luminosity, представляющий канал светимости цвета.

Эти свойства — это все double значения, от 0 до 1.

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

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

Color.Accent

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

Color.Default

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

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

Color.Transparent

Значение Color.Transparent определяет значение со всеми каналами Color , равными нулю.

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

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

  • AddLuminosityColor возвращает значение, изменяя светимость заданным разностным.
  • MultiplyAlpha возвращает значение Color , изменяя альфа- и умножая его на указанное альфа-значение.
  • ToHexвозвращает шестнадцатеричное string представление .Color
  • WithHueColorвозвращает значение, заменяющее оттенок указанным значением.
  • WithLuminosityColorвозвращает значение, заменяющее светимость указанным значением.
  • WithSaturationColorвозвращает значение, заменяющее насыщенность указанным значением.

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

Неявное преобразование между 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 имена цветов не учитывает регистр, поэтому их можно записать в нижнем регистре. Дополнительные сведения о компиляции XAML см. в статье Компиляция 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
};