예제 #1
0
        protected override void RenderOverride(RenderContext context)
        {
            base.RenderOverride(context);

            if (Content == null)
            {
                return;
            }

            if (Content is UIElement child)
            {
                child.Render(context.Canvas);
            }
            else
            {
                var text        = Content.ToString();
                var finalWidth  = this.RenderSize.Width - (Padding.Left + Padding.Right);
                var finalHeight = this.RenderSize.Height - (Padding.Top + Padding.Bottom);

                float x = (float)Padding.Left;
                float y = (float)Padding.Top + (float)finalHeight;

                var paint = new SKPaint();

                paint.ApplyBrush(Foreground, Opacity);
                paint.ApplyFont(FontFamily, FontSize, FontStyle, FontStretch, FontWeight);

                context.Canvas.DrawText(text, x, y, paint);
            }
        }
        protected override void RenderOverride(RenderContext context)
        {
            //if (Background != null)
            //{
            //using var paint = new SKPaint();
            //    paint.IsFill();

            //    paint.ApplyBrush(Background, Opacity);
            //    context.Canvas.DrawRoundRect(borderRect, 2.0f, 2.0f, paint);
            //}

            base.RenderOverride(context);

            if (Content != null)
            {
                if (Content is UIElement child)
                {
                    child.Render(context.Canvas);
                }
                else
                {
                    using var paint = new SKPaint();
                    var text        = Content.ToString();
                    var finalWidth  = this.RenderSize.Width - (Padding.Left + Padding.Right);
                    var finalHeight = this.RenderSize.Height - (Padding.Top + Padding.Bottom);

                    float x = (float)Padding.Left + ((float)finalWidth - _textContentSize.Width) / 2;
                    float y = (float)Padding.Top + (float)finalHeight - ((float)finalHeight - _textContentSize.Height) / 2;

                    paint.ApplyBrush(Foreground, Opacity);
                    paint.ApplyFont(FontFamily, FontSize, FontStyle, FontStretch, FontWeight);

                    context.Canvas.DrawText(text, (int)x, (int)y, paint);
                }
            }

            //if (BorderBrush != null && BorderThickness.Any())
            //{
            //    using var paint = new SKPaint();
            //    paint.IsStroke = true;
            //    paint.StrokeWidth = (float)BorderThickness.UniformLength;

            //    paint.ApplyBrush(BorderBrush, Opacity);


            //    context.Canvas.DrawRoundRect(
            //        borderRect,
            //        2.0f,
            //        2.0f,
            //        paint);
            //}
        }
        protected override Size MeasureOverride(Size availableSize)
        {
            // Compute the chrome size added by padding
            var paddingSize = new Size(this.Padding.Left + this.Padding.Right, this.Padding.Top + this.Padding.Bottom);

            if (_content == null)
            {
                return(paddingSize);
            }

            //If we have a child
            if (_content is UIElement child)
            {
                // Remove size of padding only from child's reference size.
                var childConstraint = new Size(Math.Max(0.0, availableSize.Width - paddingSize.Width),
                                               Math.Max(0.0, availableSize.Height - paddingSize.Height));


                child.Measure(childConstraint);
                var childSize = child.DesiredSize;
                if (!childSize.IsEmpty)
                {
                    // Now use the returned size to drive our size, by adding back the margins, etc.
                    return(new Size(
                               childSize.Width + paddingSize.Width,
                               childSize.Height + paddingSize.Height));
                }

                return(paddingSize);
            }
            else
            {
                var text = this.Content.ToString();

                var paint = new SKPaint();

                paint.ApplyFont(FontFamily, FontSize, FontStyle, FontStretch, FontWeight);

                var bounds = new SKRect();
                paint.MeasureText(text, ref bounds);

                _textContentSize = bounds.Size;

                return(new Size(bounds.Width + paddingSize.Width, bounds.Height + paddingSize.Height));
            }
        }