我要按Pushing read-only GUI properties back into ViewModel
中的建议编写一些附加属性我写过以下单元测试:
private const double Dimension = 10.0;
[Test]
[RequiresSTA]
public void Gets_ActualWidth()
{
var rectangle = new Rectangle() { Width = Dimension, Height = Dimension };
double actualWidthMeasurement = Measurements.GetActualWidth(rectangle);
Assert.That(actualWidthMeasurement, Is.EqualTo(Dimension));
}
这太天真了,矩形的ActualWidth为0,因为没有计算布局。
是否有一种简单的方法可以获得一个矩形,并计算它的布局。
我尝试将它添加到StackPanel并调用Arrange(new Rect(0,0,20,20)),但仍然得到一个ActualWidth / ActualHeight = 0.0d的矩形。
解
[Test]
[RequiresSTA]
public void Gets_ActualWidth()
{
var rectangle = new Rectangle() { Width = Dimension, Height = Dimension};
rectangle.Measure(new Size(20, 20));
rectangle.Arrange(new Rect(0, 0, 20, 20));
double actualWidthMeasurement = Measurements.GetActualWidth(rectangle);
Assert.That(actualWidthMeasurement, Is.EqualTo(Dimension));
}
答案 0 :(得分:2)
我没有看到你叫测量。这应该在Arrange之前调用,否则Arrange会失败,因为所有的DesiredSize都是0,0。
myStackPanel.Measure(new Size(20, 20));
myStackPanel.Arrange(new Rect(0, 0, 20, 20));