Лучшее решение для XmlSerializer и Системы. Рисование. Цвет

20
задан John Saunders 30 December 2013 в 01:39
поделиться

4 ответа

Самый простой метод использует это в, он - основа:

String HtmlColor = System.Drawing.ColorTranslator.ToHtml(MyColorInstance);

Это просто преобразует то, что цвет к стандартной шестнадцатеричной строке, используемой HTML, который так же, как легко десериализовывается с помощью:

Color MyColor = System.Drawing.ColorTranslator.FromHtml(MyColorString);

Тот путь Вы просто работаете со строками стандарта трясины...

32
ответ дан 29 November 2019 в 22:49
поделиться

Вы могли записать простой класс обертки для Цвета, который выставляет значения ARGB как свойства. Вы могли перевести в использование цветов из/в преобразования ARGB (см. документы ). Что-то как:

[Serializable] 
public class ColorWrapper
{
   private Color color;

   public ColorWrapper (Color color)
   {  
      this.color = color;
   }

   public ColorWrapper()
   {
    // default constructor for serialization
   }

   public int Argb
   { 
       get
       {
           return color.ToARGB(); 
       }
       set 
       {
           color = Color.FromARGB();
       }
   }
}

, Вероятно, хочу средство доступа для цвета также!

Преимущество этого - то, что класс может использоваться во всех местах, необходимо сериализировать цвета. Если Вы хотите сделать читаемое XML (а не произвольное целое число ARGB), Вы могли использовать для методов HTML, как описано balabaster.

1
ответ дан 29 November 2019 в 22:49
поделиться

Заключительная рабочая версия:

Color clrGrid = Color.FromArgb(0, 0, 0);
[XmlIgnore]
public Color ClrGrid 
{
    get { return clrGrid; }
    set { clrGrid = value; }
}
[XmlElement("ClrGrid")]
public string ClrGridHtml
{
    get { return ColorTranslator.ToHtml(clrGrid); }
    set { ClrGrid = ColorTranslator.FromHtml(value); }
}
17
ответ дан 29 November 2019 в 22:49
поделиться

Мы используем следующее:

[Serializable]
public struct ColorEx
{
    private Color m_color;

    public ColorEx(Color color)
    {
        m_color = color;
    }

    [XmlIgnore]
    public Color Color
    { get { return m_color; } set { m_color = value; } }

    [XmlAttribute]
    public string ColorHtml
    { 
        get { return ColorTranslator.ToHtml(this.Color); } 
        set { this.Color = ColorTranslator.FromHtml(value); } }

    public static implicit operator Color(ColorEx colorEx)
    {
        return colorEx.Color;
    }

    public static implicit operator ColorEx(Color color)
    {
        return new ColorEx(color);
    }
}
13
ответ дан 29 November 2019 в 22:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: