protected override Size ArrangeOverride(Size finalSize) { if (Orientation == Orientation.Vertical) { int totalHeight = 0; int maxWidth = VisualChildren.Cast <BlockElement>().Select(c => c.DesiredSize.Width).Concat(finalSize.Width).Max(); foreach (BlockElement child in VisualChildren) { int height = child.DesiredSize.Height; child.Arrange(new Rect(0, totalHeight, maxWidth, height)); totalHeight += height; } return(finalSize); } else { int totalWidth = 0; int maxHeight = VisualChildren.Cast <BlockElement>().Select(c => c.DesiredSize.Height).Concat(finalSize.Height).Max(); foreach (BlockElement child in VisualChildren) { int width = child.DesiredSize.Width; child.Arrange(new Rect(totalWidth, 0, width, maxHeight)); totalWidth += width; } return(finalSize); } }
protected override Size MeasureOverride(Size availableSize) { if (availableSize.Width == 0) { return(new Size(0, 0)); } if (_inlineSequence == null) { _inlineSequence = new InlineSequence(this); foreach (InlineElement child in VisualChildren.Cast <InlineElement>()) { child.GenerateSequence(_inlineSequence); } _inlineSequence.ValidateStackSize(); } _lines = new LineWrapper(this, availableSize).WrapSegments(); return(new Size(_lines.Select(GetLineLength).Max(), _lines.Count)); }
public override void GenerateSequence(IInlineSequence sequence) { if (sequence == null) { throw new ArgumentNullException(nameof(sequence)); } if (Color != null) { sequence.PushColor(Color.Value); } if (Background != null) { sequence.PushBackground(Background.Value); } if (Text != null) { sequence.AppendText(Text); } else { foreach (InlineElement child in VisualChildren.Cast <InlineElement>()) { child.GenerateSequence(sequence); } } if (Background != null) { sequence.PopFormatting(); } if (Color != null) { sequence.PopFormatting(); } }