none
Преобразование типов при работе с цветами (Brush и Color) RRS feed

  • Вопрос

  • Это рабочий код

        public System.Windows.Media.Color backColorStatusConnection;//Model
         StatusConnectionRB.Background =new SolidColorBrush(Model.backColorStatusConnection);//StatusConnectionRB имя TextBox WPF

    Но не рационально сотни раз за секунду создавать новый экземпляр класса. Нужно или как-то сравнить цвета, чтобы цвет сам на себя не менялся,
    или смену цвета сделать без операции new через присваивание.(присваивании не всегда возможно)

    та же проблема возникает в конверторах:

         class IdToColorConverterBid : System.Windows.DependencyObject, IValueConverter
            {
                public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
                {
                    if (value != null)
                    {
                        var intValue = (int)value;
         
         
         
                        if (intValue == 1)
                            return new SolidColorBrush(Color.FromArgb(100, 170, 218, 73));//170, 218, 73
                        if (intValue == 2)
                            return new SolidColorBrush(Color.FromArgb(100, 89, 241, 46));//114, 212, 62
                    }
                    return new SolidColorBrush(Color.FromArgb(100, 32, 29, 74));
         
                }
                public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
                {
                    throw new Exception("The method or operation is not implemented.");
                }
            }

    Здесь тоже желательно бы проверить какой цвет объекта сейчас, может быть смена цвета и не требуется?


    Eugene

    9 августа 2013 г. 7:46

Ответы

  • Сконвертировать Brush к Color в общем случае не получится, т.к. Brush — это класс более широкого назначения.

    Если вы работаете именно с SolidColorBrush, то у него есть свойство Color, с помощью которого вы сможете узнать нужный вам цвет. Как я понимаю, вы только с SolidColorBrush и работаете, поэтому можно выполнить сравнение.

    Что касается конвертера, то могу предложить вам два пути решения проблемы:

    • Если вы оперируете только с теми тремя цветами, которые приведены в примере, то можете их создать один раз, положить в статические свойство и затем многократно использовать.
    • Если у вас используется большое количество цветов и вы хотите сэкономить на создании новых объектов, то можете завести словарь Dictionary<Color, SolidColorBrush>, который будет кешировать созданные кисти.
    • Предложено в качестве ответа DreamWalkerTg 9 августа 2013 г. 15:23
    • Помечено в качестве ответа Евгений771 10 августа 2013 г. 12:52
    9 августа 2013 г. 14:49