WindowsCommunityToolkit Versions Save

The Windows Community Toolkit is a collection of helpers, extensions, and custom controls. It simplifies and demonstrates common developer tasks building .NET apps with UWP and the Windows App SDK / WinUI 3 for Windows 10 and Windows 11. The toolkit is part of the .NET Foundation.

v7.0.2

3 years ago

Packages available on NuGet

⚠ Be sure to read the main 7.0.0 release notes as well for migration info from 6.1.

Changes:

Breaking Changes :boom::

  • #3951: Fixed ReadOnlySpan2D<T>.Slice parameters order

Animations :izakaya_lantern::

  • #4014: Fixed ExpressionNode.EnsureReferenceInfo() crash with .NET Native
  • #3921: Fixed incorrect timed keyframe expression
  • #3929: Added AnimationBuilder.Start(UIElement, Action) overload

Controls :control_knobs::

  • #4020: ImageEx: test and fix setting Source
  • #3957: ImageEx does not display image
  • #3914: Infinite Canvas dropdown font selector 2
See More

Extensions :zap::

  • #3956: Added VisualExtensions.Translation attached property
  • #3937: Update Mouse to FrameworkElementExtensions
  • #3939: Fixed TaskExtensions.GetResultOrDefault() for Task.CompletedTask

Improvements :sparkles::

  • #3960: Fix Incorrect usages of UnsetValue
  • #3932: Enabled correct WeakReferenceMessenger path on .NET 5

Helpers :raised_hand::

  • #3943: Fix ColorPicker CustomPaletteColors default property value

Accessibility :wheelchair::

  • #4008: TextToolbar shortcuts should not be triggered by AltGr key

Bugs :bug::

  • #4018: Improve Messenger tests
  • #4017: CI Test Failure in MVVM WeakReferenceMessenger
  • #3852: incremnenralLoading-pageIndex-fix
  • #4011: InvalidArgumentException raised by ExpressionNode in release mode
  • #3994: Fixed NRE when setting text on Wide tile only via TileContentBuilder
  • #3955: TileContentBuilder - exception adding text on Wide tile
  • #3948: Fix [ReadOnly]Span2D<T>.TryGetSpan on legacy frameworks
  • #3947: Span2D/ReadOnlySpan2D.TryGetSpan() has incorrect implementation for legacy framework

Others:

  • #3841: [IncrementalLoadingCollection] CurrentPageIndex should not increase if LoadDataAsync failed.
  • #4012: Update for new branch name
  • #4003: Update System.Text.Json version for Controls.Media package
  • #3353: 2D System.Memory-like primitives (Span2D<T>, Memory2D<T>)
  • #3906: Added solution filter for .NET projects
  • #3942: Turned off layout rounding for failing tests
  • #3424: Memory usage improvements/optimizations to Messenger
  • #3936: Update ExecuteOnUIThreadAsync to EnqueueAsync
  • #3934: Workaround for "InheritDoc" issue with "Nerdbank.GitVersioning" xml docs
  • #3923: Fix few typos in comments
  • #3826: Specify DataGridRowHoveredBackgroundColor beyond SystemListLowColor
  • #3825: [Feature] Add more specific overrideable Color for DatagridRow hover

This list of changes was auto generated.

v7.0.1

3 years ago

Packages available on NuGet

⚠ Be sure to read the main 7.0.0 release notes as well for migration info from 6.1.

Changes:

Animations :izakaya_lantern::

  • #3843: Implicit animation binding fix

Controls :control_knobs::

  • #3890: Replace remaining references to ribbon to TabbedCommandBar
  • #3888: Fix for FocusTracker Sample App hang
  • #3884: FocusTracker Sample App Crash/Hang
  • #3881: Fixes #3871 - Can't see InAppNotification border
  • #3871: Can't apply border thickness property to InAppNotification
  • #3878: Fix WrapPanel behavior with collapsed children

Extensions :zap::

  • #3850: Fixed ListViewExtensionsCode.bind file.
  • #3849: ListViewExtensions sample is broken.
  • #3854: Added unit tests for Vector2/3/4/Quaternion parsing
  • #3837: Fix wrong bracket matching when parsing Vectors

Documentation :page_with_curl::

  • #3901: Fixed exception message and docs for Span2D<T>.CopyTo(Span2D<T>)
  • #3892: Update ScrollHeader sample docs to /docs/behaviors/HeaderBehaviors.md

Improvements :sparkles::

  • #3863: Fix Package tags to better SEO on Nuget

Bugs :bug::

  • #3895: Fix notification settings disabled for unpackaged apps on 19042 and older
  • #3887: Fixed crash in InvokeActionsActivity sample page
  • #3866: Handle Assembly being null
  • #3861: Toast notification from c++ app
  • #3836: Fix notification Group property being overwritten in unpackaged apps
  • #3835: Updating toast progress bar from unpackaged desktop apps doesn't work when using Group+Tag
  • #3834: Clicking the information button in the sample app crashes the app

Others:

  • #1234: ScrollHeader: Removed tabstop from ScrollHeader
  • #3886: Add some basic tests for WrapPanel
  • #3880: Merge Dev/7.0.1 into main
  • #3844: Fixed issue with pipeline not running UnitTests.NetCore tests.

This list of changes was auto generated.

v7.0.0

3 years ago

v7.0.0-preview5

3 years ago

Packages available on NuGet

Changes:

🐉 Here be Dragons! 🐉 This preview contains all the refactoring we've done for the 7.0.0 release of the Toolkit. Be careful when upgrading or following existing documentation as things have moved or changed from the 6.1.1 release and the last preview. We'll be further documenting these changes as we move towards our final release, this should be our final preview.

You can see the items checked in our initial plan for some of the more details as well as the list of changes below.

Refactoring Highlights

  • The Toolkit's min version is now 1809 (see #3440)
  • The Controls packages now rely on WinUI 2.5, therefore you need to follow their getting started guidance as well.
    • RadialProgressBar has been deprecated as the ProgressRing in WinUI now supports determine state.
    • TabView has been removed, please migrate to the WinUI one.
    • HeaderedTextBlock has been removed, please use HeaderedContentControl instead.
    • The custom cache feature built-in to ImageEx was removed, but can be achieved by subclassing the control and overriding a method.
    • The default stretch behavior for VerticalAlignment of WrapPanel has changed to align better with WPF, this will manifest if you have different sized items in your collection, you can add alignment properties to change back to the original top alignment, see issue #3574 for details on this change in behavior. If this effects you significantly, please let us know there.
  • The Controls package is now a meta package of other packages, this means you can optimize your app by figuring out which controls you need are in one of the sub-packages.
  • The Animations package has been restructured
    • Implicit animations and expression helpers should work as similar, though AnimationCollection is now ImplicitAnimationSet, see more details below in feature highlights
    • The animation helpers that were Behaviors have been removed and replaced with our new Animation system which has helpers for behaviors and effects across the new Microsoft.Toolkit.Uwp.UI.Behaviors and improved Microsoft.Toolkit.Uwp.UI.Media packages to create similar results with more flexibility and customizations. There is also the new UIElementExtensions.VisualFactory which can be used for static effects as these behaviors weren't always for animations.
  • The Extensions namespace has been removed so that all extensions are available in the root namespace for their package. See Issue #3422 and PR #3743 for details.
    • The Visual/Logical tree extensions have been refactored to be more explicit in the behavior and provide new functionality, see #3685 for more info.
  • DispatcherHelper is now DispatcherQueue extensions, we've provided guidance in the deprecation messages for migration. Performing these changes will help if you plan to move to XAML Islands or WinUI 3 which can only work with DispatcherQueue.
  • The Services and Parsers packages have been removed.
    • The only service we'll support moving forward is for the Microsoft Graph, you can find out more about the work we're doing in that space here, these components will be updated at a later date.
    • We recommend other solutions for integration with 3rd-Party services like RestSharp and Refit {.NET Foundation}.
    • We recommend Markdig for parsing Markdown and plan to move to it in the future (see #3200) for our Markdown parsing needs for the MarkdownTextBlock, that code has been internalized into the new Microsoft.Toolkit.Uwp.UI.Controls.Markdown package.
    • See this simple migration doc for moving to the official .NET RSS Parser.
  • The StorageHelper serialization story has changed, see #3636. Minimal work is required to maintain compatibility.
  • The Deferred event helpers have moved to the Microsoft.Toolkit package.
  • The Visual Studio Platform Analyzers have been removed.
  • The Diagnostics APIs in Microsoft.Toolkit are now in a separate package Microsoft.Toolkit.Diagnositcs
  • The MyGet feeds are no longer valid, if you want to keep up-to-date on the latest builds of the Toolkit, see our Wiki Preview Packages Page
  • The Array extensions in Microsoft.Toolkit have moved to the Microsoft.Toolkit.HighPerformance package #3444
  • Singleton has been removed, see #3134 for guidance on implementing this pattern

Feature Highlights

  • MVVM Toolkit - Find docs and samples here, see #3428 for change info between preview4 and now. By @Sergio0694
  • Whole new Fluid and XAML Animations! By @Sergio0694
  • New ColorPicker control - By @robloo
  • New TabbedCommandBar control - By @yoshiask
  • Win2D Geometry Parsers - By @ratishphilip
  • SwitchPresenter (docs and samples coming soon) - By @michael-hawker
  • Improved support for the Visual Studio Designer - By @Nirmal4G
Explicit List of Changes since Preview4

Breaking Changes :boom::

  • #3743: Refactor namespaces for extension types
  • #3422: Review namespaces and folder structure coupling
  • #3685: [Visual|Logical]Tree extensions revamp
  • #3762: Move Deferred helpers to Microsoft.Toolkit
  • #3736: Remove Custom Cache in ImageEx to evaluate binary impact size
  • #3760: Refactor ObjectExtensions -> ObjectMarshal
  • #3757: Remove services and related
  • #3752: Merge Dev/split controls Refactoring to Main
  • #3715: Move DispatcherQueueTimerExtensions to Microsoft.Toolkit.Uwp

Controls :control_knobs::

  • #3778: Update InAppNotification style to match WinUI InfoBar
  • #3727: Split out input controls from core
  • #3689: Aggregate packages
  • #3556: [Feature] Add TabbedCommandBar (ribbon) control
  • #3259: [Feature] Ribbon control
  • #3647: [Bug fix] Inverted horizontalChange when in RTL FlowDirection
  • #3646: GridSplitter broken in RightToLeft FlowDirection

Extensions :zap::

  • #3487: Inconsistent behavior for [Logical|Visual]Tree extensions
  • #3707: [Cleanup] Split Deferred across Microsoft.Toolkit and Microsoft.Toolkit.Uwp

Documentation :page_with_curl::

  • #3723: Update issue template
  • #3754: Update sample.json

Improvements :sparkles::

  • #3746: Setup Unit Test Infrastructure for VisualTree related tests
  • #3562: [Feature] Microsoft.Toolkit.Mvvm package (Preview 5)
  • #3734: Minor API tweaks to the Animations package
  • #3694: Snooze/dismiss support in toast button builders
  • #3614: [Feature] Consistency of URI usage
  • #3687: Simplified namespaces in HighPerformance package

Bugs :bug::

  • #3764: Bug fixes to ObservableValidator
  • #3763: The new MVVM-Toolkit got some new bugs with the latest updated.
  • #3769: #3070 Stretch the content of the expander header
  • #3070: Expander Header is hard to Stretch
  • #3741: ProgressRing is referenced in ImageEx but not in Style
  • #3755: Fix ToastContentBuilder audio ms-winsoundevent and ms-appx
  • #3753: The ToastContentBuilder is unable to set the toast notification sound to a ms-winsoundevent sound
  • #3748: Fix sample: using new namespace for DispatcherQueueTimerExtensions
  • #3740: Smaple.cs LookForTypeByName(string) add assmbiles to search for types.
  • #3739: Split Controls: InAppNotification smaple throws execption.
  • #3735: Split Controls: TileControl not animating the Y-axis
  • #3703: Support for UWP .NET Native even if devs modified their Default.rd.xml
  • #3093: Microsoft.Toolkit.Uwp.Notifications.dll needs to be included in .NET Native runtime directives

Others:

  • #1234: ScrollHeader: Removed tabstop from ScrollHeader
  • #3777: Update license and icon based on @kyaa-dost's investigation
  • #3774: Surface Dial Extension Bugs
  • #3776: Changed to Cake.GitVersioning and added 'nbgv cloud' on smoke test job.
  • #3766: Visual logical tree tests
  • #3759: Remove parsers
  • #3744: [Cleanup] Move Parsers to be internal to Markdown package, deprecate old package on NuGet
  • #3758: Upgrade to WinUI 2.5 and other Dependencies - Deprecate RadialProgressBar
  • #3062: [Future] 7.0 Release Plan
  • #2486: ImageEx: Added caching strategy and fixed caching of the Image.
  • #3428: [Feature] Microsoft.Toolkit.Mvvm package (Preview 5)
  • #3645: [ReadOnly]RefEnumerable<T>.DangerousCreate static constructors
  • #3503: Added the Win2d Path Geometry parser.

This list of changes was auto generated.

🦙 If you want to help contribute to the Toolkit, see our Wiki.

v7.0.0-preview4

3 years ago

Packages available on NuGet

Changes:

Breaking Changes :boom::

  • #3437: MarkdownTextBlock control is now in an independent package. We are working to split our Controls package into more easily consumable chunks for those apps that are worried about dependencies. For the final 7.0.0 release, we hope to have a bundled Microsoft.Toolkit.Uwp.UI.Controls package which will contain all sub-packages and provide a smooth upgrade experience. For now if you're using the MarkdownTextBlock and similar controls, you'll need to include the Microsoft.Toolkit.Uwp.UI.Controls.Markdown package separately.
  • #3427: Converted GazeInteraction project from C++ to C#
  • #3498: Optimizations/refactoring/tweaks to DispatcherQueueHelper
  • #3206: Xaml Islands Fixes.
  • #3440: [Discussion] Bump Minimum Version to 1809
  • #3444: Deprecated 2D array extensions from Microsoft.Toolkit
  • #3435: Removed Deprecated for 7.0
  • #3529: Fixed ImageEx.CornerRadius property

Controls :control_knobs::

  • #3379: Add ColorPickerButton
  • #3363: [Feature] Add a Reimagined Color Picker
  • #3471: Add FrameworkElement.VerticalAlignment and FrameworkElement.HorizontalAlignment support to WrapPanel
  • #3466: Add vertical alignment support to WrapPanel
  • #3528: ImageEx.CornerRadius property not working anymore

Improvements :sparkles::

  • #3527: [Feature] Microsoft.Toolkit.Mvvm package (Preview 4)
  • #3457: New Win32 toast notification helpers (no more shortcut needed!)
  • #3510: Refactoring with .NET 5 Unsafe APIs
  • #3509: Refactor pass with Unsafe.NullRef<T> and Unsafe.IsNullRef<T>
  • #3490: Fixed thread safety for NetworkHelper.Instance
  • #3197: NetworkHelper Singleton isn't thread safe
  • #3550: Parameterless ThrowHelper APIs
See More

Documentation :page_with_curl:: New Wiki!

  • #3269: Update Contribution Guide
  • #3531: Update Template Instructions

Helpers :raised_hand::

  • #3455: Generic throw helper

Accessibility :wheelchair::

  • #3544: RadialGauge UIA improvements
  • #3537: RadialGauge sample does not load when opened while narrator open
  • #3539: RadialGauge: Pressing arrow key crashes app while narrator is on
  • #3542: RadialGauge: Changing value does not announce changes to Narrator
  • #3504: Added automation peer class for expander
  • #3502: Expander control doesn't project Automation ID correctly in UI Automation tree

Bugs :bug::

  • #3558: Stop the Sample app needing to be rebuilt even when nothing has changed
  • #3332: SampleApp rebuilds even if no changes
  • #3543: Fixed MemoryStream seek to end validation

Others:

  • #3524: Fixed ArrayPoolBufferWriter<T> repeated new[] allocations
  • #3428: [Feature] Microsoft.Toolkit.Mvvm package (Preview 3)
  • #3450: Created SmokeTest projects.
  • #3346: ThrowHelper APIs
  • #3353: 2D System.Memory-like primitives (Span2D<T>, Memory2D<T>)
  • #3062: [Future] 7.0 Release Plan
  • #3534: Remove duplicate NuGet reference
  • #3482: WinUI - Test Infra

This list of changes was auto generated.

v6.1.0

3 years ago

v6.0.0

4 years ago

v5.1.1

5 years ago

Bug Fixes

animations

  • Fix carousel animation bug when SelectedIndex changes quickly. - hhchaos (PR)
  • Fix reorder grid animation - h82258652 (PR)

controls

helpers

  • Fix preview pages on direct printing using PrintHelper - Lucas Rojas (PR)
  • Print Helper - Fix ElementTheme on Dark Mode - AVK (PR)

documentation

other

  • fix: add unit tests to fix StringFormatConverter - David Bottiau (PR)
  • Updated SDK ISO url in build script - Nikola Metulev (PR)
  • Enable developer to have more control of the cursor shown for gaze - Pete Ansell (PR)
  • Corrected TextBoxRegex IsValid Set() to update the correct DependencyProperty - Ryan Henderson (PR)
  • Add the ImageCropper document link to readme.md - hhchaos (PR)
  • Fix GazeHidParser to properly interpret negative position values - Jon Campbell (PR)
  • Add Lottie links to Readme - sohchatt (PR)

v5.1.0

5 years ago

Major Updates

animations

  • Added Lottie-Windows Microsoft.Toolkit.Uwp.UI.Lottie package.

controls

extensions

services

Bug Fixes

animations

  • Applied a change to invoke the Completed event after setting the result - Max (PR)

controls

  • AlignmentGrid - Draw lines when the step value is greater than zero - Lucas Rojas (PR)
  • TabView Control - Fix focus navigation - Lucas Rojas (PR)
  • Infinite canvas export image #2672 - Ibraheem Osama (PR)
  • SharePointFileList - Fix focus lost after tab navigation - marianstdt (PR)
  • Disable TabStop property for AligmentGrid - Barbara Martinez (PR)
  • Added Support for Incremental Loading in the DataGrid - Filip Wallberg (PR)
  • Fix behavior on queue behind and stack in front modes - David Bottiau (PR)
  • Fix DataGrid colours not adapting to Dark Theme - Daniel Martin Gonzalez (PR)
  • Radial gauge step size zero - Shawn Kendrot (PR)
  • GridSplitter Loaded event subscribes after initialize. - Barbara Martinez (PR)
  • Add Guard and Timer to supplement EnumerationCompleted event which is missing on RS3 - Michael Hawker (PR)
  • Compatibility + Null checks for RemoteDevicePicker - AVK (PR)
  • Markdown parses fix for ArgumentOutOfRangeException when parsing urls - Nikola Metulev (PR)
  • Expander fix for tab navigation, tab focus, and high contrast - Nikola Metulev (PR)
  • Narrator x:Uid solution - Add resw file and x:Uid to controls - Lucas Rojas (PR)
  • Added export options for PNG, Text and InkStrokes - Steve Nessen (PR)
  • Fix for #2185 Rendered stroke are blurred on HighDPI screen and zoom - Steve Nessen (PR)
  • BladeView Control - Fix tab navigation - Lucas Rojas (PR)
  • Fix issue #2667 TabView on RS3 Resource Missing - Michael Hawker (PR)
  • Tgoodhew/master/high contrast menu - Tony Goodhew (PR)
  • Removed unnecessary Setter in NavigationView toolkit UWP Style - Agnes ZITTE (PR)
  • Hide Header for HeaderedContentControl when Header is null - Shawn Kendrot (PR)
  • Add support for FlowDirection in the MarkdownTextBlock - Shawn Kendrot (PR)

documentation

extensions

Breaking changes

  • Style Update: BladeView to work better in High Contrast Modes. - Michael Hawker (PR)
  • Behavior: Replace CompositionSurfaceFactory with Platform API - Justin Liu (PR)

deprecated

  • Menu control - Add deprecation message - Lucas Rojas (PR)
  • [SetListDataItemForNextConnectedAnimation] Deprecated misspelled method and added correct spelling - Nikola Metulev (PR)

miscellaneous

sample app

other

  • Update pipeline - Oren Novotny (PR)
  • Added .editorconfig, avoid conflicts with personal C# Code Style settings - Fons Sonnemans (PR)
  • typo: dependancy -> dependency - Nick Schonning (PR)
  • Avoid using UWP controls in the wrapper classes during design time - lhak (PR)
  • metadata update - Karl Erickson (PR)
  • Moving win32 projects to a new repo - Nikola Metulev (PR)
  • Replaced Invoke-WebRequest with WebClient in SDK Installation script - Nikola Metulev (PR)
  • Rename UwpPasswordManager.cs. - hhchaos (PR)
  • Small fix to unblock custom DpiChangedAfterParent event handlers - lhak (PR)

v5.0.0

5 years ago

Major Updates

controls

animations

  • ConnectedAnimations - Nikola Metulev (PR)
    • Added support for registering elements in code behind
    • Added support for overriding navigation parameter used for animation
    • Using DirectConnectedAnimationConfiguration on back navigation

services

helpers

developer tools

  • PlatformSpecificAnalyzer

parsers

  • MarkDown
    • Added yaml header, superscript, subscript support - Richasy (PR)

Bug Fixes

controls

  • DataGrid
  • Radial gauge
  • Expander
    • Fixed collapse animation - Lucas Rojas (PR)
    • Fixed issue with Expander background when ContentOverlay is set - Nikola Metulev (PR)
    • Fixed background colors not switching while app is running. - Pepe Rivera (PR)
  • AadLogin
  • GridSplitter
  • Menu
    • Fixed MenuItem issue with Inconsistent flyout placement in vertical orientation - Ibraheem Osama (PR)
    • Fixed background colors not switching while app is running. - Pepe Rivera (PR)
  • AdaptiveGridView
    • Fixed issue with AdaptiveGridView not laying out properly when BorderThickness is not 0 - Shawn Kendrot (PR)
  • InfiniteCanvas
    • Fixed issue where InfiniteCanvas was not resizing properly after initial load - Ibraheem Osama (PR)
  • ImageEx
    • Added caching strategy and fixed caching of the Image. - Valeriu Balan (PR)
  • InAppNotification
    • Fixed background colors not switching while app is running. - Pepe Rivera (PR)

WPF and Windows Forms controls

  • WindowsXamlHost

    • [WindowsForms] Changed index of SetWindowLong() call to GWL_EXSTYLE to avoid crash - lhak (PR)
    • [WindowsForms] Added workaround for DPI scaling issue - lhak (PR)
    • [WPF] Exposed UIA Tree - ranjeshj (PR)
    • Made sure we check if a type is a platform type before trying to activate it through the app's metadata provider - ranjeshj (PR)
  • WebView

    • Fixed issue with DPI in WPF - Huo Yaoyuan (PR)
    • WPF WebView Source property reflects current document location - Richard Murillo (PR)
    • [WebViewCompatible] Use WebViewControlHost.IsSupported to avoid loading APIs on downlevel OS - Oren Novotny (PR)

services

brushes

  • Fixed issue where RadialGradientBrush was not working when app is resumed - Lucas Rojas (PR)

helpers

  • AdvancedCollectionView
    • Fixed the VectorChanged event to only get triggered if the position of the item actually changes - Fabian Sauter (PR)
    • General code cleanup and simplification of code - Fabian Sauter (PR)
    • Fixed not subscribing/unsubscribing to events if DeferRefresh() is active - Fabian Sauter (PR)
    • Added a render transform to support dpi scaling - lhak (PR)
  • StringExtensions
    • Update Regex for Phone Number - AVK (PR)
  • PrintHelper

parsers

  • MarkDown
    • Fixed markdown parser crash when typing comments - JohanO (PR)

Breaking changes

  • Update Min (16299) and Target (17763) version on all packages and sample app - Nikola Metulev (PR)
  • Removed sealed from sealed controls - Nikola Metulev (PR)
  • [Services/IStorageManager] - Changed return type of Get and Set methods from void to Task and renamed to GetAsync and SetAsync - Kevin Bronstein (PR)

introduced new nuget packages for Win32 controls

  • Separate WebView from other controls. All WebView controls are now in the Microsoft.Toolkit.Wpf.UI.Controls.WebView and Microsoft.Toolkit.Forms.UI.Controls.WebView nugets - Richard Murillo (PR)

removed obsolete controls

removed obsolete properties

  • AadLogin: Removed obsolete event and method - Nikola Metulev (PR)
  • Twitter service: Removed TwitterGeoData, TwitterExtended, TweetStatusAsync for IRandomAccessStream and UploadPictureAsync for IRandomAccessStream - Nikola Metulev (PR)

deprecated

miscellaneous

sample app

other