Svg.Controls.Skia.Uno brings the Skia-backed SVG control model to Uno Platform. It wraps Svg.Skia, renders directly through Uno.WinUI.Graphics2DSK.SKCanvasElement, and keeps the same control-focused API shape as the Avalonia Skia package where that maps cleanly to Uno.
dotnet add package Svg.Controls.Skia.Uno
Svg control with Path, Source, SvgSource, Stretch, StretchDirection, EnableCache, Wireframe, DisableFilters, Zoom, PanX, and PanY,TryGetPicturePoint(...) and HitTestElements(...),SKSvg runtime,SvgSource resources that can be cloned and restyled per control.| Type | Role |
|---|---|
Uno.Svg.Skia.Svg |
Uno control for direct SVG display on SKCanvasElement |
Uno.Svg.Skia.SvgSource |
Reusable, cloneable, reloadable source object |
Uno.Svg.Skia.StretchDirection |
Uno-side equivalent of the Avalonia stretch-direction API |
Svg.Skia.SvgInteractionDispatcher |
Routed pointer helper exposed through Svg.Interaction |
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:svg="using:Uno.Svg.Skia">
<svg:Svg Path="/Assets/__tiger.svg"
Stretch="Uniform"
EnableCache="True" />
</Page>
SvgSource resources<Page.Resources>
<svg:SvgSource x:Key="TigerSource" Path="/Assets/__tiger.svg" />
</Page.Resources>
<svg:Svg SvgSource="{StaticResource TigerSource}" Height="220" />
The control clones an external SvgSource before applying per-control CSS, wireframe, or filter settings, so one shared resource can safely back multiple controls with different runtime styling.
Uno resource and network loading is async-first:
var source = await SvgSource.LoadAsync(
"/Assets/__tiger.svg",
parameters: new SvgParameters(null, ".accent { fill: #2563eb; }"));
await source.ReLoadAsync(new SvgParameters(null, ".accent { fill: #ef4444; }"));
Use the synchronous loaders for inline SVG strings, Stream, and SvgDocument inputs.
SvgImage, SvgResource, and markup extensions are not part of the Uno package in v1.Svg plus reusable SvgSource resources.The Uno Svg control exposes the same host-driven animation surface as the Avalonia Skia package:
AnimationBackendAnimationFrameIntervalAnimationPlaybackRateActualAnimationBackendAnimationBackendFallbackReasonAnimationBackendResolutionAnimationBackendCapabilitiesThe control shares the same backend enum:
DefaultManualDispatcherTimerRenderLoopNativeCompositionUno currently falls back away from NativeComposition because this implementation does not have a working retained child-visual attachment path on the active package surface.