April 2nd, 2025

Announcing Windows Community Toolkit v8.2

Michael Hawker
Senior Software Engineer

Announcing Windows Community Toolkit v8.2

We’re happy to announce that version 8.2 is available today! It’s an incremental update which contains a variety of improvements, made possible again with the support and contributions of our developer community. 🎉

Windows Community Toolkit Logo and Components

If you’re not familiar with the Windows Community Toolkit, see below here! Or download our Sample Gallery from the Microsoft Store to start exploring what it has available for WinUI developers.

At a Glance 🔍

Important Changes

Dependencies/TFM

The Toolkit’s dependencies have been updated to WindowsAppSDK 1.6 and Uno Platform 5.5 versions to take in fixes and updates we needed to support .NET 8 and address other issues within the Toolkit. As usual, the Toolkit shoulbe be forward compatible with minor versions of these libraries and frameworks.

We’ve also updated our Win2D dependency in this PR which now means the base TFM required for building is again 19041 and should work with the default WinUI templates. We know this caused a lot of confusion for folks with the 8.1 release.

New Features ✨

Native AOT

The Windows Community Toolkit supports Native AOT for all platforms. Compiling your C# app with AOT can help improve performance and memory usage.

See the release notes for some remaining known issues.

Link to the PR from @Arlodotexe 👑 Tracking issue is here.

UWP Support for .NET 9

We have also added UWP Support for .NET 9. See more details in the original preview blog here. The Windows Community Toolkit still supports original receipe as well with .NET Native.

Link to the PR from @Arlodotexe 👑 And Sergio Pedri 👑

SwitchConverter

SwitchPresenter now accepts object as content instead of being restricted to UIElement, just like the base ContentPresenter it is based on. This opens up many new possibilities, including using it with a DataTemplate and swapping data for context, and the new SwitchConverter.

SwitchConverter Example GIF

<Page.Resources>
  <!--  SwitchConverter lets you easily convert general values to resources  -->
  <converters:SwitchConverter x:Key="StatusToColorSwitchConverter"
                              TargetType="local:CheckStatus">
    <!--  Note: These are reused from the controls namespace from SwitchPresenter  -->
    <controls:Case Content="{ThemeResource SystemFillColorSuccessBrush}"
                   Value="Success" />
    <controls:Case Content="{ThemeResource SystemFillColorCautionBrush}"
                   Value="Warning" />
    <controls:Case Content="{ThemeResource SystemFillColorCriticalBrush}"
                   Value="Error" />
  </converters:SwitchConverter>
</Page.Resources>

<StackPanel Spacing="8">
    <ComboBox x:Name="StatusPicker"
              Header="Pick a status"
              SelectedIndex="0">
        <x:String>Success</x:String>
        <x:String>Warning</x:String>
        <x:String>Error</x:String>
    </ComboBox>
    <TextBlock Text="This is it, this is the demo:" />
    <TextBlock FontWeight="SemiBold"
                Foreground="{x:Bind StatusPicker.SelectedItem, Converter={StaticResource StatusToColorSwitchConverter}, Mode=OneWay}"
                Text="{x:Bind StatusPicker.SelectedItem, Mode=OneWay}" />
</StackPanel>

Even though the XAML Llama originally created SwitchPresenter, and independently created the SwitchConverter after while tinkering on a project. We’ve discovered that a SwitchConverter has existed in the past as well; so if you missed it from WPF, there’s one here now too! 🎉

Link to PR from the XAML Llama 🦙 👑

Improvements

AcrylicBrush in WinUI3

AcrylicBrush is now re-enabled for WinUI 3. Note, as per WinUI 3 in general, the backdrop source is not enabled. You can use this now to composite within your application.

Thanks to PR from Sergio Pedri 👑

Media Sample in Gallery app of ImageBlendBrush

Also check out the additional Media/Brush samples in the Windows Community Toolkit Gallery app added by Erin Woo in PR 639 🎉

DispatcherQueueTimer.Debounce

While working on Windows Command Palette, we noticed some issues with the current extensions for DispatcherQueueTimer.Debounce. This led us to a flurry of improvements and tests to ensure these extensions worked well and as expected in a variety of scenarios and mainted state better replacing the ConcurrentDictionary with a ConditionalWeakTable. This also led directly to future improvements in .NET itself thanks to Sergio Pedri!

See more info in this PR from XAML Llama 🦙 👑

Bug Fixes 🐞

For the entire list of bug fixes and changes in this update, see the full changelog on GitHub here.

Big thanks to our community contributors! 👑

Windows Community Toolkit Labs 🧪

To help the process of starting new ideas and contributing to the Toolkit, we created Windows Community Toolkit Labs as a place where we can incubate and iterate over new ideas, try things out without worry, see what gets used by the community, and then decide to bring them into the main repository when they’re ready and well-tested.

We’ve talked about Labs here before, but the main goal is to help encapsulate our development processes from inception to polished product. It also helps us better understand what gets interest and excitement from our community before shipping something to our broader developer audience.

The best way to get involved with the Toolkit is to get involved with Windows Community Toolkit Labs. Setup the preview feed and pull down a package:.

https://pkgs.dev.azure.com/dotnet/CommunityToolkit/_packaging/CommunityToolkit-Labs/nuget/v3/index.json

Then provide feedback on that experiment, that’s all it takes to get started contributing!

From there join in a discussion or start a new one – we look forward to meeting you!

We have updated the Sample Gallery in the Store to include the latest iterations of Labs components. Since our last release, we have two new experiments for you to try and provide feedback on:

DependencyPropertyGenerator

Tired of using propdp everywhere and all the boiler-plate required for Dependency Properties? Well try out the new source generator which makes them super simple to use!

public partial class MyControl : DependencyObject
{
  [GeneratedDependencyProperty(DefaultValue = 42)]
  public partial int Number { get; set; }
}

Let the compiler generate the rest of the mess for you! This takes advantage of the partial properties added in C# 13.

Thanks to PR from Sergio Pedri 👑

OpacityMaskView

OpacityMaskView

The OpacityMaskView allows complex brush compositing with transparency to let content behind an element appear through. It is a ContentControl that wraps another element.

Thanks to @h82258652 with this PR to get this journey started! 👑

Feedback & Contributing

Not sure how to get started contributing? Don’t worry! Did you know that just providing feedback on what we’re doing and trying our new components is contributing?!?

If you have a new idea for a control, API, or something, read more about Windows Community Toolkit Labs above.

Join in our discussion about this 8.1 release on GitHub here. We’re also active on Discord in the Windows App Community server #community-toolkit channel here.

You can also reach out on Social Media with the #WindowsCommunityToolkit hashtag. Find us at @XAMLLlama, @xamlllama.bsky.social, @XAMLLlama@hachyderm.io, @Niels9001, and @Arlodottxt@fosstodon.org.

If you’re interested in contributing documentation or code, here are a few extra steps:

  • Take a look at our repository and clone it.
  • Use the OpenSolution.bat file for a component and try to build it following the steps in the readme.
  • Back on GitHub, find an unclaimed TODO item for a component.
  • Comment to chime in with what you’d like to do, and we can help you get started toward your first Pull Request (PR)!

About the Windows Community Toolkit

If you’re new here, the Windows Community Toolkit is a collection of controls for WinUI 2, WinUI 3, and Uno Platform developers that simplifies and demonstrates common developer tasks for building experiences on Windows 10 and Windows 11 with .NET.

Reminder that 8.x is a complete re-work of how the Windows Community Toolkit is built and published from top-to-bottom. Be sure to read the breaking changes and migration notes from our last release blog here and on our wiki here!. In our 8.x update, we overhauled how we worked on the toolkit to enable targeting multiple platforms from a single-codebase, and to make it much easier to develop, maintain, and contribute Toolkit components.

The Toolkit is part of the .NET Foundation. You can download our Sample Gallery from the Microsoft Store to discover and try Toolkit components before getting started on your project. You can find an introduction video here.

About Uno Platform

Uno Platform Logo

For those new to Uno Platform – it enables building single-source C# and WinUI apps which run natively on Windows, iOS, Android, macOS, Linux and Web via WebAssembly. It offers Figma integration for design-development handoff, and a set of extensions to bootstrap your projects. Uno Platform is free and Open Source (Apache 2.0) and available on GitHub.

🙋‍♂️ Looking to learn more about WinUI? Check out this YouTube Playlist.

Author

Michael Hawker
Senior Software Engineer

Michael A. Hawker, a.k.a. XAML Llama, is a Senior Software Engineer for the Apps, Partners, and Store (APS) team at Microsoft. APS focuses on driving the ISV ecosystem through technical engagement with partners and industry as well as providing essential first party experiences. Michael is the maintainer of the Windows Community Toolkit and prior “App Ninja”. He is also the creator of XAML Studio, a Microsoft Garage project.

1 comment