public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
Person pp = new Person();
MessageBox.Show(pp.name);
pp.age = 16;
MessageBox.Show(pp.name);
MessageBox.Show(pp.like);
}
}
public class Person:DependencyObject
{
public int age;
public string like;
public static readonly DependencyProperty nameProperty = DependencyProperty.Register("name", typeof(string), typeof(Person), new PropertyMetadata("熊俊", new PropertyChangedCallback(namechanged),new CoerceValueCallback(agename))); //注册依赖项属性
public string name
{
get { return (string)GetValue(nameProperty); }
set { SetValue(nameProperty, value); }
}
public static void namechanged(DependencyObject d, DependencyPropertyChangedEventArgs e) //属性值更改通知
{
Person p = (d as Person);
p.like = "我喜欢" + e.NewValue.ToString();
}
public static object agename(DependencyObject d, object e) //属性值限制
{
int g = (d as Person).age;
if (g > 40)
return "熊俊";
return "萧蔷";
}
}上面的代码中,age值变更了,为什么name值没有变呢?是不是agename方法没有执行呢?namechanged方法为什么又没有执行?这两个委托都是注册依赖项属性时,写进去了的啊?
private void button1_Click(object sender, RoutedEventArgs e)
{
Person pp = new Person();
pp.name = "张三";
MessageBox.Show(pp.like);
}为什么,输出的是:我喜欢萧蔷,应该是“我喜欢张三”啊?