Using SVG Path Icons in WinUI

From PathIcon Basics to ViewBox Scaling and Fluent UI Integration

Icons are a core part of modern UI, especially with fluent designs and vector-based interfaces. In WinUI, one of the best ways to use scalable vector icons is through the PathIcon control. In this blog, I’ll walk you through how it works, how to use an SVG path (like the GitHub logo), how to fix sizing issues using ViewBox, and why this approach makes it easy to use icon packs.


What is PathIcon?

PathIcon is a WinUI control used to display vector graphics defined by XAML path geometry. Unlike bitmap images, path icons scale cleanly at any resolution and fit well with modern UI styles.

The Data Property

The core of PathIcon is the Data property. It contains the vector instructions (path geometry) that describe the actual shape. These instructions typically come from SVG files or design tools like Figma/Illustrator.

Example skeleton:
<PathIcon Data="M..." Foreground="{ThemeResource TextFillColorPrimaryBrush}" />

Example: GitHub Icon in PathIcon

Let’s take the GitHub SVG path and place it directly inside a PathIcon:

<PathIcon Data="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z"
          Foreground="{ThemeResource TextFillColorPrimaryBrush}" />

This works and renders the GitHub logo correctly, but there’s a catch!


Resizing Issue (And Why It Happens)

PathIcon respects its natural geometry values. SVG paths are often drawn at large sizes (like 100×100 units). If you drop them directly into a toolbar, button, or small layout, the icon either:

So how do we fix it?

Solution: Wrap the Icon in a ViewBox

Viewbox automatically scales the child element (the entire path) to fit the desired size.

<Viewbox Height="18">
    <PathIcon Data="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z" />
</Viewbox>

Now the icon will: Scale proportionally, Fit inside buttons/toolbars, Respect the given size (e.g. 16px, 18px, 24px)

You can also control width/height together:

<Viewbox Width="24" Height="24">
    <PathIcon Data="..." />
</Viewbox>

📝 Note: This is the same approach used in the WinUI Gallery. For more details, see this PR


Using Icon Packs (Like Fluent UI System Icons)

One of the biggest advantages of using PathIcon is that you can easily integrate icon packs. Microsoft’s Fluent UI System Icons are a great example. They provide a huge library of SVG paths for common UI actions (add, delete, edit, etc.).

You can copy the SVG path data from the Fluent UI repo and paste it directly into a PathIcon inside a ViewBox to get perfectly scalable, theme-aware icons.

<Viewbox Height="18">
    <PathIcon Data="(Fluent icon path here)" Foreground="{ThemeResource TextFillColorPrimaryBrush}" />
</Viewbox>


Final Thoughts

Using PathIcon with SVG paths in WinUI is a powerful way to create scalable, modern UIs. By wrapping icons in a ViewBox, you can easily manage sizing issues and ensure your icons look great at any resolution. Plus, integrating icon packs like Fluent UI System Icons becomes straightforward, giving you access to a wide range of professionally designed icons for your applications.



References

⬅ Previous: Saving & Restoring Window State
Next: Programmers (Sharp Minds, Unprepared Worlds) ➡
decorative gif