public void Measures_In_Correct_Order() { LayoutTestControl control1; LayoutTestControl control2; var root = new LayoutTestRoot { Child = control1 = new LayoutTestControl { Child = control2 = new LayoutTestControl(), } }; var order = new List <ILayoutable>(); Size MeasureOverride(ILayoutable control, Size size) { order.Add(control); return(new Size(10, 10)); } root.DoMeasureOverride = MeasureOverride; control1.DoMeasureOverride = MeasureOverride; control2.DoMeasureOverride = MeasureOverride; root.LayoutManager.ExecuteInitialLayoutPass(root); control2.InvalidateMeasure(); control1.InvalidateMeasure(); root.InvalidateMeasure(); order.Clear(); root.LayoutManager.ExecuteLayoutPass(); Assert.Equal(new ILayoutable[] { root, control1, control2 }, order); }
public void Calling_ExecuteLayoutPass_From_ExecuteInitialLayoutPass_Does_Not_Break_Measure() { // Test for issue #3550. var control = new LayoutTestControl(); var root = new LayoutTestRoot { Child = control }; var count = 0; root.LayoutManager.ExecuteInitialLayoutPass(root); control.Measured = false; control.DoMeasureOverride = (l, s) => { if (count++ == 0) { control.InvalidateMeasure(); root.LayoutManager.ExecuteLayoutPass(); return(new Size(100, 100)); } else { return(new Size(200, 200)); } }; root.InvalidateMeasure(); control.InvalidateMeasure(); root.LayoutManager.ExecuteInitialLayoutPass(root); Assert.Equal(new Size(200, 200), control.Bounds.Size); Assert.Equal(new Size(200, 200), control.DesiredSize); }