Ejemplo n.º 1
0
 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);
     }
 }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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();
            }
        }