数学.圆与依赖属性,奇怪的行为
本文关键字:依赖 属性 数学 | 更新日期: 2023-09-27 18:07:27
我有一个依赖属性'Area'作为:
public double Area
{
get { return Math.Round((double)this.GetValue(AreaProperty),2); }
set { this.SetValue(AreaProperty, value); }
}
我正在使用代码添加一些视觉效果,并在添加视觉效果时更新区域。我想把值四舍五入到小数点后两位
drawQuads(builder); //Updating area in these three methods
extrudeQuads();
drawSidesAndBottoms(builder);
Area *= 1; //this is required so that the roundoff method can work (Why ?)
你可以看到属性的getter将值四舍五入。但问题是四舍五入不工作,除非我在调用这三个方法后将"面积"乘以1或其他东西。
请解释一下原因,为什么我需要乘以1?
编辑:实际上,这些方法正在使用如下语句更新Area:
Area += someFormula;
它是不是在调用getter?即使它不是,最后我在标签中显示值(实际上将此属性绑定到label Content属性,以便区域更改标签)。内容也会更新)。
当WPF的依赖属性系统得到你的Area
属性时,它并不真正调用get_Area
(即你在那里声明的get
)。相反,它通过您可以认为是this.GetValue(AreaProperty)
的东西获得幕后的价值。Area *= 1
(或类似的,例如Area = Area
)导致你的getter被实际调用,然后将四舍五入的值设置为实际的支持值。
我不确定你的setter是否也会发生同样的事情,所以你可能想试着把四舍五入放在那里,看看是否有什么变化:
public double Area
{
get { return (double)this.GetValue(AreaProperty); }
set { this.SetValue(AreaProperty, Math.Round(value,2)); }
}
如果这不起作用,我会尝试两件事之一:(1)重新考虑你的整个方法,并从不同的角度来看待这一点-例如,如果你只需要它在显示为字符串时四舍五入,使用字符串格式这样做,或者(2)创建一个RoundedDouble
类,隐式地转换为和从double
,但与你的四舍五入的地方,并使用Area
。