Строка для раскрашивания Xamarin.Form

#xamarin.forms #colors

#c# #Цвет #xamarin.forms

Вопрос:

Как преобразовать строку в цвет в xamarin.откуда, нет метода Color.FromName ?

 string colorStr = "Blue";
BoxView objBoxView = new BoxView
{
    HeightRequest = double.Parse(HeightRequest),
    HorizontalOptions = LayoutOptions.Fill,
    VerticalOptions = LayoutOptions.End,
    BackgroundColor = colorStr
};
 

Комментарии:

1. BackgroundColor = Color.Blue сделает это

2. Maaan Я знаю, что мне нужна строка для преобразования в цвет, потому что «синий» берется из файла json, но я просто написал «синий»!!

3. ColorTypeConverter -> Вам следует взглянуть на этот класс

Ответ №1:

Некоторые примеры использования ColorTypeConverter со строковыми значениями из тестового TestColorTypeConverter в ColorUnitTests.cs в Xamarin.Формирует github:

 var input = new[]
{
    "blue", "Blue", "Color.Blue",     // by name
    "#0000ff", "#00f",                // by hex code
    "#a00f",                          // by hex code with alpha
    "rgb(0,0, 255)", "rgb(0,0, 300)", // by RGB
    "rgba(0%,0%, 100%, .8)",          // by RGB percent with alpha
    "hsl(240,100%, 50%)",             // by HSL
    "hsla(240,100%, 50%, .8)",        // by HSL with alpha
    "Accent",                         // by Accent color
    "Default", "#12345"               // not a valid color
};

ColorTypeConverter converter = new ColorTypeConverter();

foreach (var str in input)
{
    Color color = (Color)(converter.ConvertFromInvariantString(str));
    Debug.WriteLine("{0} is {1} Color", str, color.IsDefault ?  "not a" : "a");
}
 

Ответ №2:

По-видимому Color.FromHex , он преобразует имя цвета в Color значение для вас, например

 Color background = Color.FromHex("blue"); // #0000FF
 

Это, по крайней мере, работает с Xamarin.Формы 4.2.0. Я не вижу, чтобы это было явно обещано в документации, на которую даны ссылки, так что кто знает — они могут изменить это в будущем. Было бы неплохо посмотреть, как это соотносится с XF 5.

Ответ №3:

да, к сожалению, нет, но вы можете использовать следующее:

 var strColor = "Blue";    
var color = System.Drawing.Color.FromName(strColor);
boxColor.BackgroundColor = Color.FromRgb(color.R, color.G, color.B);
 

Ответ №4:

Добавил этот конвертер в наш NuGet.

 using AscendantWare.Xamarin.Essentials.Tools;

String MyColor = "Red";
Color cRed = MyColor.ToColor();
 

Дополнительная информация здесь.