See the question and my original answer on StackOverflow

You can use a Direct2D effect, the Tile Effect for that. This effect is hardware accelerated. Microsoft provides a nuget called Win2D that enables that for WinUI: Microsoft.Graphics.Win2D

Once you have created a standard WinUI3 application project, add this nuget, and for this XAML:

<Window
    x:Class="Win2DApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:canvas="using:Microsoft.Graphics.Canvas.UI.Xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <StackPanel
        HorizontalAlignment="Center"
        VerticalAlignment="Center"
        Orientation="Horizontal">
        <canvas:CanvasControl
            x:Name="myCanvas"
            Width="128"
            Height="128"
            CreateResources="myCanvas_CreateResources"
            Draw="myCanvas_Draw" />
    </StackPanel>
</Window>

You can display a repetition of an image with a C# code like this:

public sealed partial class MainWindow : Window 
{
  public MainWindow() 
  {
    this.InitializeComponent();
  }

  // handle canvas' CreateResources event for Win2D (Direct2D) resources
  private void myCanvas_CreateResources(CanvasControl sender, CanvasCreateResourcesEventArgs args)
      => args.TrackAsyncAction(CreateResources(sender).AsAsyncAction());

  // create all needed resources async (here a bitmap)
  CanvasBitmap _canvasBitmap;
  private async Task CreateResources(CanvasControl sender)
  {
      // this is my 32x32 image downloaded from https://i.stack.imgur.com/454HU.jpg?s=32&g=1
      _canvasBitmap = await CanvasBitmap.LoadAsync(sender, @"c:\downloads\smo.jpg");
  }

  // handle canvas' Draw event
  // check quickstart https://microsoft.github.io/Win2D/WinUI3/html/QuickStart.htm
  private void myCanvas_Draw(CanvasControl sender, CanvasDrawEventArgs args)
  {
      // create an intermediate command list as a feed to the Direct2D effect
      using var list = new CanvasCommandList(sender);
      using var session = list.CreateDrawingSession();
      session.DrawImage(_canvasBitmap);

      // create the Direct2D effect (here Tile effect https://learn.microsoft.com/en-us/windows/win32/direct2d/tile)
      using var tile = new TileEffect();
      tile.Source = list;
      
      // use image size as source rectangle
      tile.SourceRectangle = _canvasBitmap.Bounds;

      // draw the effect (using bitmap as input)
      args.DrawingSession.DrawImage(tile);
  }
}

Here is the result with my StackOverflow avatar as the bitmap source:

enter image description here

The image is 32x32 and the canvas is 128x128 so we have 4x4 tiles.