Как установить цвет с зависимостью свойства? - PullRequest
1 голос
/ 09 марта 2012

Это может быть глупый вопрос, но как установить свойство color пользовательского контроля? Поскольку в XAML цвет - это просто текстовое поле, как мне нужно преобразовать значение, чтобы я мог правильно установить кисть

<MyUserControl LabelColour="#FF747474" /> <MyUserControl LabelColour="Red"/>

Вот как далеко я дошел. Значение входит в текст, но каков следующий шаг, чтобы преобразовать его в кисть?

private static DependencyProperty LabelColourProperty
        = DependencyProperty.Register("LabelColour", typeof(object), typeof(MyUserControl), new PropertyMetadata(null));

    public object LabelColour
    {
        get { return GetValue(LabelColourProperty); }
        set { SetValue(LabelColourProperty, value); LabelGrid.Background = (Brush)value; }
    }

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Silverlight не предоставляет прямой метод для преобразования строки в Color.Самый близкий вам метод - Color.FromArgb.См. Цвет , который содержит ближайший простой код, который достигает того, что вам нужно (как прямо цитирует Виниций).

Лично я бы просто не использовал object в качестве типа свойства и позволил XamlParser принятьпозаботьтесь об этом (что в конечном итоге вам и искусственно придется).

Вот как это должно выглядеть:

private static DependencyProperty LabelColourProperty  
        = DependencyProperty.Register("LabelColour", typeof(Brush), typeof(MyUserControl), new PropertyMetadata(null, OnLabelColourChanged));  

private static void OnLabelColourChanged(DependencyObject source,
                           DependencyPropertyChangedEventArgs e)
{
     MyUserControl ctl = source as MyUserControl;
     if (ctl != null)
     {
         ctl.LabelGrid.Background = (Brush)e.NewValue;
     }
}

public Brush LabelColour  
{  
    get { return GetValue(LabelColourProperty) as Brush; }  
    set { SetValue(LabelColourProperty, value); }  
}  

Примечание: никогда не помещайте другой код в установщик свойства, которое реализовано каксвойство зависимости.Когда значение задается с помощью привязки (что является главной целью его реализации в качестве свойства зависимости), метод SetValue используется напрямую, минуя установщик нормального свойства.Следовательно, все, что вам нужно сделать, когда изменение значений необходимо выполнить в обратном вызове с измененным свойством on, которое могут предоставить метаданные свойства.

1 голос
/ 09 марта 2012
String xamlString = "<Canvas xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" Background=\"MistyRose\"/>";
Canvas c = (Canvas) System.Windows.Markup.XamlReader.Load(xamlString);
SolidColorBrush mistyRoseBrush = (SolidColorBrush) c.Background;
System.Windows.Media.Color mistyRose = mistyRoseBrush.Color;

Я думаю, что это может вам помочь.

...