这可能是一个愚蠢的问题,但是如何设置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; }
}
答案 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属性更改回调中完成时,您需要发生任何事情。