.NET 10: Noteworthy UI Changes in .NET MAUI
Explore key UI updates in .NET 10 for .NET MAUI, including new properties like IsRefreshEnabled and OffColor, deprecations of ClickGestureRecognizer and TableView, and enhancements to MediaPicker and SearchHandler for improved performance and user experience.

.NET 10 for .NET MAUI introduces several improvements to existing controls and even a few deprecations that developers should be aware of. Staying informed about these updates, particularly concerning visual components, is crucial for efficient and modern application development. Changes such as the new OffColor property in the Switch control or IsSupported checks in certain APIs can significantly streamline the development process.
These updates, while some may seem minor, are vital for keeping applications current and adhering to best practices. This article will highlight several important UI enhancements in .NET 10 that developers should know.
RefreshView
In .NET 10, the RefreshView control introduces the IsRefreshEnabled property, which allows developers to enable or disable only the pull-to-refresh action. Previously, the IsEnabled property would disable the entire RefreshView component, including its visual elements. With IsRefreshEnabled, developers can now control the pull-to-refresh gesture independently, improving user experience without blocking the entire component.
Here’s an example of how to use this property:
<RefreshView IsRefreshEnabled="false">
<StackLayout>
<Entry Placeholder="Username" />
<Entry Placeholder="Password" />
<Button Text="Login" />
</StackLayout>
</RefreshView>
ClickGestureRecognizer Was Removed
The ClickGestureRecognizer has been removed in .NET 10. Developers using it should migrate to TapGestureRecognizer, which provides equivalent functionality for detecting mouse clicks while also supporting screen taps, offering broader platform coverage and improved support.
CollectionView and CarouselView
To enhance the performance and stability of CollectionView and CarouselView, .NET 9 introduced optional handlers for iOS and Mac Catalyst. In .NET 10, these handlers are now the default, providing several benefits: improved performance without manual configuration, more efficient memory usage, and smoother, more stable scrolling and item rendering.
SearchHandler
The SearchHandler in .NET 10 introduces new APIs for programmatic keyboard control: ShowSoftInputAsync() to display the keyboard and HideSoftInputAsync() to dismiss it. This feature enables more precise management of user interaction, such as automatically displaying the keyboard on search screen entry or hiding it upon result selection or scrolling. Developers using reflection-based properties like DisplayMemberName are advised to consult the official documentation regarding trimming and feature switch settings to ensure runtime member availability.
Popups
In .NET 10, DisplayAlert and DisplayActionSheet methods have been deprecated in favor of their new asynchronous counterparts: DisplayAlertAsync() and DisplayActionSheetAsync(). This update aligns popup handling with modern asynchronous API practices, preventing main thread blocking, enhancing integration with async/await operations, and providing a more robust and consistent API. Migration is straightforward, requiring a simple replacement of the old methods with their async versions and using await.
Window Buttons
For Microsoft Windows desktop applications, .NET 10 introduces the ability to enable or disable minimize and maximize window buttons. This grants developers greater control over window behavior and user experience, moving beyond the operating system's default handling. This feature is particularly useful for scenarios requiring an application to remain visible, preventing maximizing for specific layouts, or implementing kiosk-style interfaces where only the close button is permitted.
MessagingCenter
The MessagingCenter has been made internal in .NET 10, removing it from direct public use. Developers previously utilizing MessagingCenter for inter-component communication should transition to WeakReferenceMessenger, available within the CommunityToolkit.Mvvm package. WeakReferenceMessenger offers improved efficiency, helps prevent memory leaks, and provides better integration with MVVM patterns.
MediaPicker
The MediaPicker in .NET 10 now includes automatic handling of EXIF (Exchangeable Image File Format) information for images. EXIF metadata, which includes details like capture date, orientation, device model, and camera settings, is automatically stored with photos. This enhancement streamlines image processing by:
- Auto-rotate Images: Images are now automatically rotated based on their EXIF orientation data, eliminating issues with sideways, upside-down, or incorrectly oriented photos without requiring additional developer code.
- Preserving EXIF Information: When using
MediaPicker, all original EXIF data is retained, ensuring that critical metadata remains intact.
Text to Speech
The SpeechOptions class now features a new Rate property, enabling developers to control the playback speed of text-to-speech output. This offers precise adjustment for faster, slower, or application-specific speaking paces.
Switch Appearance
The Switch component offers enhanced customization with the new OffColor property, a bindable property that allows setting the color of the switch when it is in the 'off' state. This can be configured in XAML or C#.
<Switch OffColor="Red" OnColor="Green" />
Switch @switch = new Switch
{
OffColor = Colors.Red,
OnColor = Colors.Orange
};
TableView Deprecation
The TableView has been marked as obsolete in .NET 10. The official documentation recommends migrating to CollectionView, which serves as a robust replacement, offering equivalent functionality. Developers are advised to address such deprecations to maintain a current codebase.
Conclusion
This article has outlined the key UI updates in .NET 10 for .NET MAUI, providing developers with essential information for effective migration planning and codebase maintenance. Progress Telerik also announced day-zero support for .NET 10 across its product portfolio, reinforcing its commitment to enhancing the .NET developer experience.