在以前的.NET提供此功能
问题描述:
我在看从Charles Petzold一些代码,他使用了PropertyChangedCallback
在以前的.NET提供此功能
public static readonly DependencyProperty CenterProperty =
EllipseGeometry.CenterProperty.AddOwner(
typeof(CenteredEllipse),
new FrameworkPropertyMetadata(new Point(0, 0),
EllipsePropertyChanged));
以下语法,如果你做这种方式,你需要把它不起作用财产改变回调在新的new PropertyChangedCallback(EllipsePropertyChanged)
。他还直接编辑变量:
void EllipsePropertyChanged(DependencyPropertyChangedEventArgs args)
{
elipGeo.Center = Center;
elipGeo.RadiusX = RadiusX;
elipGeo.RadiusY = RadiusY;
InvalidateMeasure();
}
它应该是这样的:
static void EllipsePropertyChnaged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
EllipseGoemetry ellipseGeo = (EllipseGoemetry)obj;
args.newValue ...
}
是否有人知道这是怎么回事?
答
第一个是Delegate Type Inference的一个例子。从此:http://blogs.msdn.com/b/noahc/archive/2008/09/23/delegate-type-inference-in-c.aspx
什么我不知道,直到今天这条线#13会工作,你可以 只通过方法名作为参数,并委托类型 会被推断。好,易于。 #14 /#15号线对我来说也是新的, 以及至少有关使用()作为空白参数列表的部分。
答
的事情是,他使用相同的名称有两个方法,因此可能会比较混乱:
static void EllipsePropertyChanged(DependencyObject obj,
DependencyPropertyChangedEventArgs args)
{
(obj as CenteredEllipse).EllipsePropertyChanged(args);
}
void EllipsePropertyChanged(DependencyPropertyChangedEventArgs args)
{
elipGeo.Center = Center;
elipGeo.RadiusX = RadiusX;
elipGeo.RadiusY = RadiusY;
InvalidateMeasure();
}
第一个是代表,第二个是只是一个方法他在代表中打电话给他的班级,在那里他按照它应该做的那样投了obj。
我试过了,它没有工作,它不承认名称和任何类的档案。我不得不将obj投入到类中,然后修改变量。 – mihajlv 2012-01-15 19:16:00