Edit

Share via


What's new in WPF for .NET 10 Preview

This article provides a high-level overview about what's new with Windows Presentation Foundation (WPF) in .NET 10 Preview. For detailed information, see the release announcements.

.NET 10 Preview 4 was released in May 2025.

Release announcements

Performance improvements

Performance was improved by replacing internal data structures with base .NET types, such as ReadOnlyCollection<T>. This minimized allocations in UI automation and file dialogs, and speeding up pixel format conversions.

Enhanced performance by optimizing cache operations, array handling, and migrating font collection loader to managed code.

Performance was optimized across font rendering, dynamic resources, input composition, trace logging, regex usage, and XAML parsing.

Fluent style changes

Various bug fixes have been addressed in .NET 10, to improve the Fluent UI style support in WPF. Fluent UI style support is still in progress.

Warning

.NET 10 Preview 4 introduced a bug related to fluent styles. For more information, see .NET 10 Preview 4 release notes.

Clipboard changes

WPF and Windows Forms now use the same clipboard API. Both desktop technologies unify how they interact with the clipboard.

.NET 9 obsoleted BinaryFormatter, which is used in some clipboard operations. These clipboard operations required you to opt in to compatibility package, or work around the operation. To ease the pain of moving away from BinaryFormatter, .NET 10 is obsoleting certain clipboard methods to indicate that they shouldn't be used. More methods are being added to help JSON serialization with clipboard data, circumventing the need for BinaryFormatter.

Bug fixes

Addressed various bug fixes including UI element cursor types, crash issues when bitmap streams are null, build and test step errors, and minor bugs in BitmapMetadata and native dependencies.

Addressed localization issues for ScrollViewer and ContextMenu.

Over 4,000 unit tests for System.Xaml and WindowsBase added.

Enhanced performance by optimizing cache operations, array handling, and migrating font collection loader to managed code.

Code cleanup

Moving out of .NET Framework left behind unused Code Access Security (CAS) related attributes and code. Many of these have been removed in the .NET codebase.

  • Remove unused CAS resource strings and its translations from all libraries.
  • Remove unused CAS and XBAP code from OleCmdHelper/ISecureCommand.
  • Remove unused CAS code from FontSourceCollection/FontSource.

Conducted extensive code cleanups, including syntax standardization and argument clarity, to improve code readability and maintainability. Debugging patterns were modernized and legacy constructs like ArrayList were phased out for maintainability.

New APIs

Community contributor bstordrup enhanced the MessageBox with more button and result options. For more information, see #9613.

namespace System.Windows
{
    public enum MessageBoxButton
    {
        OK = 0,
        OKCancel = 1,
+       AbortRetryIgnore = 2,
        YesNoCancel = 3,
        YesNo = 4,
+       RetryCancel = 5,
+       CancelTryContinue = 6,
    }

    public enum MessageBoxResult
    {
        None = 0,
        OK = 1,
        Cancel = 2,
+       Abort = 3,
+       Retry = 4,
+       Ignore = 5,
        Yes = 6,
        No = 7,
+       TryAgain = 10,
+       Continue = 11,
    }
}

Miscellaneous changes

  • Incorporated design-time markup compilation to facilitate smoother development workflows.