Xamarin Forms convert color name to Xamarin.Forms.Color

1

You will see a program in which I read an xml file, this indicates options of position and configuration of the screen. The objective is to have an automatic launcher that, reading that xml, knows the settings you must configure. Each xml is different from the previous one, and it also indicates background, text or border colors, a field that for example has the value "Transparent" or the value "Blue".

Could color-to-color name conversion be automated in some way? at the moment I do it with a switch but there are so many colors that I need many since I have not found any method to make the conversion. I leave my simple code for you to understand me:

            switch (color)
            {
                case "Accent":
                    colorDevolver = Xamarin.Forms.Color.Accent;
                    break;
                case "AliceBlue":
                    colorDevolver = Xamarin.Forms.Color.AliceBlue;
                    break;
                case "Azure":
                    colorDevolver = Xamarin.Forms.Color.Azure;
                    break;
                case "Bisque":
                    colorDevolver = Xamarin.Forms.Color.Bisque;
                    break;
                case "Black":
                    colorDevolver = Xamarin.Forms.Color.Black;
                    break;
                case "Blue":
                    colorDevolver = Xamarin.Forms.Color.Blue;
                    break;
                case "BlueViolet":
                    colorDevolver = Xamarin.Forms.Color.BlueViolet;
                    break;
                case "BurlyWood":
                    colorDevolver = Xamarin.Forms.Color.BurlyWood;
                    break;
                case "Cyan":
                    colorDevolver = Xamarin.Forms.Color.Cyan;
                    break;
                case "DarkGray":
                    colorDevolver = Xamarin.Forms.Color.DarkGray;
                    break;
                case "DarkKhaki":
                    colorDevolver = Xamarin.Forms.Color.DarkKhaki;
                    break;
                case "DarkOrange":
                    colorDevolver = Xamarin.Forms.Color.DarkOrange;
                    break;
                case "DarkRed":
                    colorDevolver = Xamarin.Forms.Color.DarkRed;
                    break;
                case "DarkSeaGreen":
                    colorDevolver = Xamarin.Forms.Color.DarkSeaGreen;
                    break;
                case "DarkViolet":
                    colorDevolver = Xamarin.Forms.Color.DarkViolet;
                    break;
                case "DimGray":
                    colorDevolver = Xamarin.Forms.Color.DimGray;
                    break;
                case "DodgerBlue":
                    colorDevolver = Xamarin.Forms.Color.DodgerBlue;
                    break;
                case "FloralWhite":
                    colorDevolver = Xamarin.Forms.Color.FloralWhite;
                    break;
                case "Fuchsia":
                    colorDevolver = Xamarin.Forms.Color.Fuchsia;
                    break;
                case "Gainsboro":
                    colorDevolver = Xamarin.Forms.Color.Gainsboro;
                    break;
                case "GhostWhite":
                    colorDevolver = Xamarin.Forms.Color.GhostWhite;
                    break;
                case "Gray":
                    colorDevolver = Xamarin.Forms.Color.Gray;
                    break;
                case "Honeydew":
                    colorDevolver = Xamarin.Forms.Color.Honeydew;
                    break;
                case "HotPink":
                    colorDevolver = Xamarin.Forms.Color.HotPink;
                    break;
                case "Khaki":
                    colorDevolver = Xamarin.Forms.Color.Khaki;
                    break;
                case "Lavender":
                    colorDevolver = Xamarin.Forms.Color.Lavender;
                    break;
                case "LavenderBlush":
                    colorDevolver = Xamarin.Forms.Color.LavenderBlush;
                    break;
                case "LemonChiffon":
                    colorDevolver = Xamarin.Forms.Color.LemonChiffon;
                    break;
                case "LightBlue":
                    colorDevolver = Xamarin.Forms.Color.LightBlue;
                    break;
                case "LightCyan":
                    colorDevolver = Xamarin.Forms.Color.LightCyan;
                    break;
                case "LightCoral":
                    colorDevolver = Xamarin.Forms.Color.LightCoral;
                    break;
                case "LightGoldenrodYellow":
                    colorDevolver = Xamarin.Forms.Color.LightGoldenrodYellow;
                    break;
                case "LightGray":
                    colorDevolver = Xamarin.Forms.Color.LightGray;
                    break;
                case "LightGreen":
                    colorDevolver = Xamarin.Forms.Color.LightGreen;
                    break;
                case "LightSteelBlue":
                    colorDevolver = Xamarin.Forms.Color.LightSteelBlue;
                    break;
                case "Lime":
                    colorDevolver = Xamarin.Forms.Color.Lime;
                    break;
                case "MistyRose":
                    colorDevolver = Xamarin.Forms.Color.MistyRose;
                    break;
                case "Moccasin":
                    colorDevolver = Xamarin.Forms.Color.Moccasin;
                    break;
                case "NavajoWhite":
                    colorDevolver = Xamarin.Forms.Color.NavajoWhite;
                    break;
                case "OliveDrab":
                    colorDevolver = Xamarin.Forms.Color.OliveDrab;
                    break;
                case "Orange":
                    colorDevolver = Xamarin.Forms.Color.Orange;
                    break;
                case "PaleGoldenrod":
                    colorDevolver = Xamarin.Forms.Color.PaleGoldenrod;
                    break;
                case "PeachPuff":
                    colorDevolver = Xamarin.Forms.Color.PeachPuff;
                    break;
                case "Pink":
                    colorDevolver = Xamarin.Forms.Color.Pink;
                    break;
                case "Red":
                    colorDevolver = Xamarin.Forms.Color.Red;
                    break;
                case "RoyalBlue":
                    colorDevolver = Xamarin.Forms.Color.RoyalBlue;
                    break;
                case "Silver":
                    colorDevolver = Xamarin.Forms.Color.Silver;
                    break;
                case "SpringGreen":
                    colorDevolver = Xamarin.Forms.Color.SpringGreen;
                    break;
                case "Teal":
                    colorDevolver = Xamarin.Forms.Color.Teal;
                    break;
                case "Thistle":
                    colorDevolver = Xamarin.Forms.Color.Thistle;
                    break;
                case "Transparent":
                    colorDevolver = Xamarin.Forms.Color.Transparent;
                    break;
                case "Violet":
                    colorDevolver = Xamarin.Forms.Color.Violet;
                    break;
                case "Wheat":
                    colorDevolver = Xamarin.Forms.Color.Wheat;
                    break;
                case "White":
                    colorDevolver = Xamarin.Forms.Color.White;
                    break;
                case "WhiteSmoke":
                    colorDevolver = Xamarin.Forms.Color.WhiteSmoke;
                    break;
                case "Yellow":
                    colorDevolver = Xamarin.Forms.Color.Yellow;
                    break;
                case "InactiveBorder":
                    colorDevolver = Xamarin.Forms.Color.White;
                    break;
                default:
                    colorDevolver = Xamarin.Forms.Color.Transparent;
                    break;

            }

The goal would be to convert that case name to the appropriate color in some way. Thanks.

    
asked by Marcos Muñoz Morales 28.03.2018 в 09:10
source

1 answer

0

As I said in comments, although you do not remove the switch, if you can make a converter that facilitates your use in xaml with bindings.

First you create a class of the converter, which is called StringToColorConverter, for example:

using System;
using System.Globalization;
using Xamarin.Forms;

namespace Proyecto.Converters
{
    public class StringToColorConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            Color colorDevolver = Color.Transparent;
            if (value is string)
            {
                string color = (string)value;
                switch (color)
                {
                    case "Accent":
                        colorDevolver = Color.Accent;
                        break;
                    case "AliceBlue":
                        colorDevolver = Color.AliceBlue;
                        break;
                    case "Azure":
                        colorDevolver = Color.Azure;
                        break;
                    case "Bisque":
                        colorDevolver = Color.Bisque;
                        break;
                    case "Black":
                        colorDevolver = Color.Black;
                        break;
                    case "Blue":
                        colorDevolver = Color.Blue;
                        break;
                    case "BlueViolet":
                        colorDevolver = Color.BlueViolet;
                        break;
                    case "BurlyWood":
                        colorDevolver = Color.BurlyWood;
                        break;
                    case "Cyan":
                        colorDevolver = Color.Cyan;
                        break;
                    case "DarkGray":
                        colorDevolver = Color.DarkGray;
                        break;
                    case "DarkKhaki":
                        colorDevolver = Color.DarkKhaki;
                        break;
                    case "DarkOrange":
                        colorDevolver = Color.DarkOrange;
                        break;
                    case "DarkRed":
                        colorDevolver = Color.DarkRed;
                        break;
                    case "DarkSeaGreen":
                        colorDevolver = Color.DarkSeaGreen;
                        break;
                    case "DarkViolet":
                        colorDevolver = Color.DarkViolet;
                        break;
                    case "DimGray":
                        colorDevolver = Color.DimGray;
                        break;
                    case "DodgerBlue":
                        colorDevolver = Color.DodgerBlue;
                        break;
                    case "FloralWhite":
                        colorDevolver = Color.FloralWhite;
                        break;
                    case "Fuchsia":
                        colorDevolver = Color.Fuchsia;
                        break;
                    case "Gainsboro":
                        colorDevolver = Color.Gainsboro;
                        break;
                    case "GhostWhite":
                        colorDevolver = Color.GhostWhite;
                        break;
                    case "Gray":
                        colorDevolver = Color.Gray;
                        break;
                    case "Honeydew":
                        colorDevolver = Color.Honeydew;
                        break;
                    case "HotPink":
                        colorDevolver = Color.HotPink;
                        break;
                    case "Khaki":
                        colorDevolver = Color.Khaki;
                        break;
                    case "Lavender":
                        colorDevolver = Color.Lavender;
                        break;
                    case "LavenderBlush":
                        colorDevolver = Color.LavenderBlush;
                        break;
                    case "LemonChiffon":
                        colorDevolver = Color.LemonChiffon;
                        break;
                    case "LightBlue":
                        colorDevolver = Color.LightBlue;
                        break;
                    case "LightCyan":
                        colorDevolver = Color.LightCyan;
                        break;
                    case "LightCoral":
                        colorDevolver = Color.LightCoral;
                        break;
                    case "LightGoldenrodYellow":
                        colorDevolver = Color.LightGoldenrodYellow;
                        break;
                    case "LightGray":
                        colorDevolver = Color.LightGray;
                        break;
                    case "LightGreen":
                        colorDevolver = Color.LightGreen;
                        break;
                    case "LightSteelBlue":
                        colorDevolver = Color.LightSteelBlue;
                        break;
                    case "Lime":
                        colorDevolver = Color.Lime;
                        break;
                    case "MistyRose":
                        colorDevolver = Color.MistyRose;
                        break;
                    case "Moccasin":
                        colorDevolver = Color.Moccasin;
                        break;
                    case "NavajoWhite":
                        colorDevolver = Color.NavajoWhite;
                        break;
                    case "OliveDrab":
                        colorDevolver = Color.OliveDrab;
                        break;
                    case "Orange":
                        colorDevolver = Color.Orange;
                        break;
                    case "PaleGoldenrod":
                        colorDevolver = Color.PaleGoldenrod;
                        break;
                    case "PeachPuff":
                        colorDevolver = Color.PeachPuff;
                        break;
                    case "Pink":
                        colorDevolver = Color.Pink;
                        break;
                    case "Red":
                        colorDevolver = Color.Red;
                        break;
                    case "RoyalBlue":
                        colorDevolver = Color.RoyalBlue;
                        break;
                    case "Silver":
                        colorDevolver = Color.Silver;
                        break;
                    case "SpringGreen":
                        colorDevolver = Color.SpringGreen;
                        break;
                    case "Teal":
                        colorDevolver = Color.Teal;
                        break;
                    case "Thistle":
                        colorDevolver = Color.Thistle;
                        break;
                    case "Transparent":
                        colorDevolver = Color.Transparent;
                        break;
                    case "Violet":
                        colorDevolver = Color.Violet;
                        break;
                    case "Wheat":
                        colorDevolver = Color.Wheat;
                        break;
                    case "White":
                        colorDevolver = Color.White;
                        break;
                    case "WhiteSmoke":
                        colorDevolver = Color.WhiteSmoke;
                        break;
                    case "Yellow":
                        colorDevolver = Color.Yellow;
                        break;
                    case "InactiveBorder":
                        colorDevolver = Color.White;
                        break;
                    default:
                        colorDevolver = Color.Transparent;
                        break;
                }
            }
            return colorDevolver;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

Then you have to declare it, as I usually use the converters in more than one place I declare them in app.xaml like this:

   <Application.Resources>
        <ResourceDictionary>  
        <!--  CONVERTERS  -->
            <converters:StringToColorConverter x:Key="StringToColorConverter"/>
        </ResourceDictionary>
    </Application.Resources>

Once done, you can use it anywhere. Imagine for example that you have a button.

 <Button  
        BackgroundColor="{Binding Color, Converter={StaticResource StringToColorConverter}}"                 
        HorizontalOptions="FillAndExpand"
        Margin="50,0,50,20" /> 

If the viewmodel has the property Color with the string of the text, the button will automatically know which color the background has to be painted.

    
answered by 13.04.2018 в 13:28