protected override Size ArrangeOverride(Size finalSize) { if (!this.CustomLayout) { return(base.ArrangeOverride(finalSize)); } UIElementCollection internalChildren = this.InternalChildren; double indent = this.Indent; double height = 0.0; double num1 = this.rightColumnWidth; double num2 = Math.Max(this.ViewportOffset + this.ViewportWidth - this.rightColumnWidth - this.Indent, 0.0); Thickness margin = this.Margin; for (int index = 0; index < internalChildren.Count; ++index) { UIElement uiElement = internalChildren[index]; if (uiElement.Visibility != Visibility.Collapsed) { TimelineTreeRowPosition position = TimelineTreeRow.GetPosition((DependencyObject)uiElement); double width = uiElement.DesiredSize.Width; if (position == TimelineTreeRowPosition.Left) { if (width < num2) { num2 -= width; } else { width = num2; num2 = 0.0; } } Size size = new Size(width, finalSize.Height); if (position == TimelineTreeRowPosition.Left) { uiElement.Arrange(new Rect(new Point(indent, 0.0), size)); indent += size.Width; } else if (position == TimelineTreeRowPosition.Right) { uiElement.Arrange(new Rect(new Point(this.ViewportOffset + this.ViewportWidth - num1, 0.0), size)); num1 -= size.Width; } else if (position == TimelineTreeRowPosition.Border) { uiElement.Arrange(new Rect(new Point(this.ViewportOffset, 0.0), new Size(this.ViewportWidth, finalSize.Height))); } if (size.Height > height) { height = size.Height; } } } return(new Size(this.ViewportWidth + this.ViewportOffset, height)); }
protected override Size MeasureOverride(Size availableSize) { if (!this.CustomLayout) { return(base.MeasureOverride(availableSize)); } UIElementCollection internalChildren = this.InternalChildren; Size size1 = new Size(double.PositiveInfinity, availableSize.Height); Size size2 = new Size(this.ViewportWidth, availableSize.Height); double height = 0.0; double indent = this.Indent; this.rightColumnWidth = 0.0; for (int index = 0; index < internalChildren.Count; ++index) { UIElement uiElement = internalChildren[index]; if (uiElement.Visibility != Visibility.Collapsed) { TimelineTreeRowPosition position = TimelineTreeRow.GetPosition((DependencyObject)uiElement); Size availableSize1 = position != TimelineTreeRowPosition.Border ? size1 : size2; uiElement.Measure(availableSize1); Size desiredSize = uiElement.DesiredSize; if (desiredSize.Height > height) { height = desiredSize.Height; } bool flag = true; if (position == TimelineTreeRowPosition.Right) { this.rightColumnWidth += desiredSize.Width; } else if (position == TimelineTreeRowPosition.Border) { flag = false; } if (flag) { indent += desiredSize.Width; } } } return(new Size(indent, height)); }