maui-graphics-drawing

.NET MAUI Graphics Drawing

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "maui-graphics-drawing" with this command: npx skills add davidortinau/maui-skills/davidortinau-maui-skills-maui-graphics-drawing

.NET MAUI Graphics Drawing

Use this skill when implementing custom drawing in .NET MAUI apps using Microsoft.Maui.Graphics and GraphicsView .

GraphicsView and IDrawable

GraphicsView is the canvas host control. Assign an IDrawable implementation to its Drawable property.

<GraphicsView Drawable="{StaticResource myDrawable}" HeightRequest="300" WidthRequest="300" />

public class MyDrawable : IDrawable { public void Draw(ICanvas canvas, RectF dirtyRect) { // All drawing happens here } }

  • ICanvas provides all drawing methods.

  • RectF dirtyRect is the area that needs redrawing.

  • Call graphicsView.Invalidate() to trigger a redraw from outside the drawable.

Drawing Shapes

Lines

canvas.StrokeColor = Colors.Blue; canvas.StrokeSize = 2; canvas.DrawLine(10, 10, 200, 10);

Rectangles

canvas.StrokeColor = Colors.Black; canvas.DrawRectangle(10, 10, 100, 50); canvas.FillColor = Colors.LightBlue; canvas.FillRectangle(10, 10, 100, 50); canvas.DrawRoundedRectangle(10, 10, 100, 50, 12); canvas.FillRoundedRectangle(10, 10, 100, 50, 12);

Ellipses

canvas.DrawEllipse(10, 10, 100, 80); canvas.FillEllipse(10, 10, 100, 80);

Arcs

canvas.DrawArc(10, 10, 100, 100, 0, 180, clockwise: true, closed: false);

Paths with PathF

Use PathF for complex shapes built from segments.

var path = new PathF(); path.MoveTo(10, 10); path.LineTo(100, 10); path.LineTo(100, 100); path.QuadTo(50, 150, 10, 100); // control point, end point path.CubicTo(0, 80, 0, 40, 10, 10); // cp1, cp2, end path.Close(); canvas.StrokeColor = Colors.Red; canvas.DrawPath(path); canvas.FillColor = Colors.Orange; canvas.FillPath(path);

  • MoveTo(x, y) — move without drawing.

  • LineTo(x, y) — straight line to point.

  • QuadTo(cx, cy, x, y) — quadratic Bézier curve.

  • CubicTo(c1x, c1y, c2x, c2y, x, y) — cubic Bézier curve.

  • Close() — close the path back to the start.

Drawing Text

canvas.FontColor = Colors.Black; canvas.FontSize = 18; canvas.Font = Microsoft.Maui.Graphics.Font.Default; // DrawString with bounding rect and alignment canvas.DrawString("Hello", 10, 10, 200, 40, HorizontalAlignment.Center, VerticalAlignment.Center);

// DrawString at a point (no bounding box) canvas.DrawString("World", 10, 60, HorizontalAlignment.Left);

  • Set FontColor , FontSize , and Font before calling DrawString .

  • Overloads accept either a point or a bounding rectangle with alignment.

Canvas State Properties

Set these properties before draw calls to control appearance.

Stroke

canvas.StrokeColor = Colors.Navy; canvas.StrokeSize = 4; canvas.StrokeDashPattern = new float[] { 6, 3 }; // dash, gap canvas.StrokeLineCap = LineCap.Round; // Butt, Round, Square canvas.StrokeLineJoin = LineJoin.Round; // Miter, Round, Bevel canvas.FillColor = Colors.CornflowerBlue;

Shadows

canvas.SetShadow( offset: new SizeF(5, 5), blur: 4, color: Colors.Gray);

canvas.FillRectangle(20, 20, 100, 60); // drawn with shadow canvas.SetShadow(SizeF.Zero, 0, null); // remove shadow

Clipping

Restrict drawing to a region.

// Clip to rectangle canvas.ClipRectangle(20, 20, 100, 100); // Clip to arbitrary path var clipPath = new PathF(); clipPath.AppendCircle(80, 80, 50); canvas.ClipPath(clipPath); // Subtract a region from the current clip canvas.SubtractFromClip(40, 40, 30, 30);

Canvas State Management

Use SaveState / RestoreState to isolate drawing settings.

canvas.SaveState(); canvas.StrokeColor = Colors.Red; canvas.StrokeSize = 6; canvas.DrawRectangle(10, 10, 80, 80); canvas.RestoreState(); // StrokeColor, StrokeSize, clip, shadow, etc. are restored

  • Always pair SaveState and RestoreState .

  • Saves/restores: stroke, fill, font, shadow, clip, and transforms.

  • Nest calls for layered state isolation.

Triggering Redraws

graphicsView.Invalidate();

  • Invalidate() queues a redraw; the framework calls IDrawable.Draw on the next frame.

  • Do not call Draw directly; always use Invalidate() .

  • Avoid calling Invalidate() in a tight loop; batch state changes before invalidating.

Quick Reference

Method / Property Purpose

DrawLine

Stroke a line between two points

DrawRectangle / FillRectangle

Stroke or fill a rectangle

DrawRoundedRectangle / FillRoundedRectangle

Rounded-corner rectangle

DrawEllipse / FillEllipse

Stroke or fill an ellipse

DrawArc

Stroke an arc segment

DrawPath / FillPath

Stroke or fill a PathF

DrawString

Render text with alignment

SetShadow

Apply drop shadow to subsequent draws

ClipRectangle / ClipPath

Restrict drawing region

SubtractFromClip

Remove area from clip

SaveState / RestoreState

Push/pop canvas state

graphicsView.Invalidate()

Request a redraw

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

maui-performance

No summary provided by upstream source.

Repository SourceNeeds Review
General

maui-data-binding

No summary provided by upstream source.

Repository SourceNeeds Review
General

maui-rest-api

No summary provided by upstream source.

Repository SourceNeeds Review
General

maui-shell-navigation

No summary provided by upstream source.

Repository SourceNeeds Review