如何使用dependencyproperty设置颜色?

时间:2012-03-09 11:16:54

标签: silverlight silverlight-3.0

这可能是一个愚蠢的问题,但是如何设置usercontrol的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 个答案:

答案 0 :(得分:1)

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;

我认为这可以帮助你。

答案 1 :(得分:1)

Silverlight不会公开将字符串转换为Color的直接方法。您将获得的最接近的是Color.FromArgb方法。请参阅Color,其中包含最接近您需要的简单代码(如Vinicius直接引用的那样)。

就我个人而言,我不会使用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); }  
}  

注意永远不要将其他代码放在作为依赖项属性实现的属性的setter中。当通过绑定设置值时(这是首先将它作为依赖项属性实现的全部要点),SetValue方法直接使用普通属性setter。因此,当值变化需要在属性元数据可以提供的on属性更改回调中完成时,您需要发生任何事情。