WPF,请问依赖项属性
定义依赖项属性的字段,必须是public的,必须是static的,那是否必须是readonly的呢?
下面这个链接中例子,就不是readonly的
http://www.cnblogs.com/xiongpq/archive/2010/06/29/1767905.html
------解决方案--------------------不需要readonly,但是推荐readonly
------解决方案--------------------
直接在后面=赋值,只允许一次
------解决方案--------------------
DependencyProperty只是声明依赖属性而已,它readonly只是不让TextProperty字段再被修改。
你Text里的Get、Set并没有对TextProperty字段进行修改。
------解决方案--------------------
拜托,对字段进行修改是 TextProperty = XXXX
你这里是SetValue,请问赋值了么?
请你去了解一下依赖属性的值保存在哪里吧
------解决方案--------------------关键在于楼主没有理解ReadOnly的用法。
------解决方案--------------------呵呵。SerValue是以TextProperty这个变量(的值)为索引去修改别的东西,并不是修改TextProperty所指向的对象本身。类似于
Dictionary<DependencyProperty,object> dic= new .......;
dic[TextProperty] = value;
当然Dependency数据库机制要比这个Dictionary<DepandencyProperty,object> 要复杂,例如这个SetValue方法就检测TextProperty 上的定义,来判断value是不是string类型。
无论如何,TextProperty 类型跟string毫无关系。怎样也不能生硬地把一个sting看成是在修改一个DependencayProperty的属性,更不是在给 TextProperty 变量赋值。
------解决方案--------------------比如说如果你突然发现原来的定义不对,需要修改
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", //属性名称
typeof(System.Windows.Media.Color), //属性类型
typeof(TestDependencyPropertyWindow), //该属性所有者,即将该属性注册到那个类上
new PropertyMetadata("")); //属性默认值
public System.Windows.Media.Color Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
那么也就立刻改变了。因为这个TextProperty 本身,你只是声明了属性的类型,它创建一个名片(用来提供SeValue方法去作为索引查找依据),而并不包含值。
------解决方案--------------------
加,防止被更改