Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > [SL] Сахар для цвета


Автор: dazy 6.4.2009, 12:18
Как известно, все цвета  в xaml пишутся в формате #FF000000 (исключая стандартные black red и т.п.) Самое интересное, что в коде, класс Colors содержит всего 15 цветов, в то время как в xaml можно использовать 192 поименованных цвета.  По умолчанию, цифры в цвет можно перевести пользуясь функцией FromArgb(). Но она принимает данные по-байтам, что не удобно. 
А удобно скопировать цвет из xaml или из блендера и вставить в код.

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

Код

public static Color UIntToColor (uint argb)
{
    return Color.FromArgb((byte) ((argb & -16777216) >> 0x18),
                          (byte) ((argb & 0xff0000) >> 0x10),
                          (byte) ((argb & 0xff00) >> 8),
                          (byte) (argb & 0xff));
}


И пользуемся:
sb = new SolidColorBrush(UIntToColor (0xFF696969));




Автор: WolfTheGrey 6.4.2009, 13:28
Извени, не хчу показаться:  smile 

Тебе обязательно с цифрами рабоать?

ведь, можно при помощи рефлекции переписать все цвета из классов: Colors & Brushes в string[192 цвета] масив;

Автор: dazy 6.4.2009, 14:26
Скажем так, я прекрасно понимаю, что одного и того же результата можно добиться разными способами.
Какой способ выбирать, решает разработчик исходя из текущей ситуации. 

Я использую в том числе и этот способ. Тем более что в WPF, эта функция - UIntToColor есть по-умолчанию. Почему бы не применять ее в SL?

Да, и 192 - это ооочень мало. smile

Добавлено @ 14:28
А можно пример, как вы из string[192] потом цвет получаете?

Автор: rooks 6.4.2009, 14:57
dazy, спасибо, очень классная штука... я ее немного переделал:
Код
public static Color ToColor(this uint argb)

и теперь это можно юзать так:
Код
Color c = 0xFF696969.ToColor();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)