最近在写一个silverlight 自定义控件的时候,在设置属性的时候遇到些问题。
上网搜索了一番,很多博客都引用博客园中万事大吉的一个silverlight自定义空间开发系列教程。大致方法是
public static DependencyProperty TextProperty;
public string MyText
{
get
{
return (string)base.GetValue(TextProperty);
}
set
{
base.SetValue(TextProperty, value);
}
}
接着重写一个静态构造函数。在其中注册这个属性
static MySilverButton()
{
TextProperty = DependencyProperty.Register("MyText",
typeof(string),
typeof(MySilverButton),
new PropertyMetadata("默认属性值", new PropertyChangedCallback(MySilverButton.OnTextPropertyChanged)));
}
在上面大家也看到了,这里注册了一个回调函数,剩下的事情就是这个回调函数的事 了。private static void OnTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
(d as MySilverButton).OnTextPropertyChanged(e);
}
void OnTextPropertyChanged(DependencyPropertyChangedEventArgs e)
{
try
{
TextBlock BgTextBlock = this.GetTemplateChild("ButtonCaption") as TextBlock;
BgTextBlock.Text = e.NewValue as string;
}
catch (Exception ex)
{
string ks = ex.ToString();
}
大家也看到了,简简单单一个属性需要这么多代码。
我在我的空间里定义了5个属性,那么。。。。。。。
我的解决方法是, 在onApplyTemplate()方法中进行设置。
public static DependencyProperty TextProperty;
public string MyText
{
get
{
return (string)base.GetValue(TextProperty);
}
set
{
base.SetValue(TextProperty, value);
}
}
这部分不动
接着重写一个静态构造函数。在其中注册这个属性
static MySilverButton()
{
TextProperty = DependencyProperty.Register("MyText",
typeof(string),
typeof(MySilverButton),
new PropertyMetadata("默认属性值));
}
将注册的回调函数取了。去了之后怎么更改变量呢?
这时候我在onApplyTemplate()方法中进行设置,
TextBlock tb = base.GetTemplateChild("textBlock1") as TextBlock;
tb.Text = content;
两行代码搞定。
不知道这样做会带来什么问题,没有做过什么测试。
但是一般的功能没问题。
如果你也向我一样,那就用吧