private void UpdateFirstAndLast() { int count = base.InternalChildren.Count; int num = base.InternalChildren.Count - 1; for (int i = 0; i < count; i++) { SingleRowTabPanel.SetIsFirst(base.InternalChildren[i], i == 0); SingleRowTabPanel.SetIsLast(base.InternalChildren[i], i == num); } }
protected override Size ArrangeOverride(Size finalSize) { double width = 0; foreach (UIElement internalChild in base.InternalChildren) { Size calculatedTabSize = SingleRowTabPanel.GetCalculatedTabSize(internalChild); internalChild.Arrange(new Rect(width, 0, calculatedTabSize.Width, calculatedTabSize.Height)); width = width + calculatedTabSize.Width; } return(finalSize); }
protected override Size MeasureOverride(Size availableSize) { double num; double num1; this.UpdateFirstAndLast(); double num2 = 0; double width = 0; List <double> nums = new List <double>(); foreach (UIElement internalChild in base.InternalChildren) { internalChild.Measure(availableSize); Size desiredSize = internalChild.DesiredSize; SingleRowTabPanel.SetCalculatedTabSize(internalChild, desiredSize); num2 = Math.Max(num2, desiredSize.Height); nums.Add(desiredSize.Width); width = width + desiredSize.Width; } num2 = Math.Min(availableSize.Height, num2); if (width <= availableSize.Width) { return(new Size(width, num2)); } SingleRowTabPanel.CalculateTruncationThreshold(nums, width - availableSize.Width, out num, out num1); foreach (UIElement uIElement in base.InternalChildren) { Size size = uIElement.DesiredSize; double width1 = size.Width; double minimumWidth = SingleRowTabPanel.GetMinimumWidth(uIElement); if (width1 >= num) { width1 = Math.Max(minimumWidth, num1); } Size size1 = new Size(width1, size.Height); SingleRowTabPanel.SetCalculatedTabSize(uIElement, size1); uIElement.Measure(size1); } return(new Size(availableSize.Width, num2)); }