private void OnUpdate(Visual visual, Visual parent, bool forceArrange) { var element = visual as UIElement; if (element != null) { var flags = element.UIFlags; if (forceArrange || flags.HasFlag(UIElementFlags.MeasureDirty)) { element.Measure(element.LastAvailableSize); } if (forceArrange || flags.HasFlag(UIElementFlags.ArrangeDirty)) { forceArrange = true; element.Arrange(GetArrangeRect(element)); } } if (forceArrange || visual.VisualFlags.HasFlag(VisualFlags.RenderDirty)) { visual.Render(); } foreach (var child in visual.VisualChildren) { OnUpdate(child, visual, forceArrange); } }