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)); } }