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, которое могут предоставить метаданные свойства.