Я собираюсь написать некоторые прикрепленные свойства, как предложено в Перенос свойств только для чтения обратно в 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 (новый 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));
}