What's New in UraniumUI v3.0
UraniumUI v3.0 is the .NET 10 generation of UraniumUI. It updates the framework baseline, introduces new MAUI-rendered controls, improves form validation workflows, and fixes several high-impact issues across data, dialogs, inputs, buttons, and platform effects.
If you are upgrading an existing app, read the Migration Guide to v3.0 before updating packages.
Highlights
- .NET 10 and .NET MAUI 10 support.
- New
CalendarViewcontrol. - New date prompt dialog API and CalendarView-backed
DatePickerField. - New
Selectand MaterialSelectFieldcontrols. - New async validation support in
FormView. - Virtualized
TreeViewfor larger data sets. - DataGrid improvements for headers and auto-generated columns.
- Important bug fixes for Android Release builds, compiled bindings, dialogs, form validation, binding contexts, buttons, and blur effects.
Platform and package baseline
UraniumUI v3 targets .NET 10 only. .NET 9 support remains available in UraniumUI v2.16.0.
The v3 branch uses:
- .NET MAUI
10.0.71 InputKit.Maui4.6.0Plainer.Maui1.8.0CommunityToolkit.Maui13.0.0forUraniumUI.Dialogs.CommunityToolkit
Related PRs:
CalendarView
v3 adds uranium:CalendarView, a cross-platform MAUI-rendered calendar control.
CalendarView supports nullable selection, minimum and maximum dates, culture-aware week layout, month navigation, year selection, and style classes for calendar parts.
<uranium:CalendarView
SelectedDate="{Binding SelectedDate}"
MinimumDate="{Binding MinimumDate}"
MaximumDate="{Binding MaximumDate}" />
Learn more in the CalendarView documentation.
Related PRs:
Date prompts and DatePickerField
Dialogs now include a date prompt API through IDialogService.DisplayDatePromptAsync(...). The built-in default, Mopups, and CommunityToolkit dialog providers support it.
var selectedDate = await dialogService.DisplayDatePromptAsync(
title: "Select a date",
selectedDate: DateTime.Today);
material:DatePickerField now uses this date prompt and CalendarView instead of relying on the native picker interaction. It also supports empty values by making Date, MinimumDate, and MaximumDate nullable.
public DateTime? BirthDate { get; set; }
Learn more in the dialogs documentation and DatePickerField documentation.
Related PRs:
- #1012 Support nullable DatePickerField dates
- #1015 Add date prompt dialog support
- #1017 Migrate DatePickerField to date prompt with CalendarView
Select and SelectField
v3 introduces a MAUI-rendered uranium:Select control and a Material material:SelectField wrapper.
The new select controls provide overlay-based single selection, templated items, templated selected values, keyboard interaction, and a Material input-field experience without depending on native picker behavior.
<material:SelectField
Title="Country"
ItemsSource="{Binding Countries}"
SelectedItem="{Binding SelectedCountry}" />
Learn more in the Select documentation and SelectField documentation.
Related PR:
Async FormView validation
v3 adds UraniumUI.Controls.FormView, which extends the InputKit form workflow with async validation support.
New validation APIs include:
SubmitAsync(...)ValidateFormAsync(...)IFormValidatorFormValidationHandlerValidationModelShowValidationSummaryIsBusyandIsValidating- attached
FormView.ValidationPath - attached
FormView.IsBusyIndicator
This makes server-side validation and other async validation workflows easier to integrate with generated forms and dialogs.
if (await formView.SubmitAsync())
{
// Continue after successful validation.
}
AutoFormView participates in the new validation flow automatically by assigning validation paths to generated editors.
Learn more in the Material validation documentation.
Related PRs:
TreeView virtualization
material:TreeView was reworked to use a flat, virtualized CollectionView internally. This improves large tree performance and avoids the cost of recursively creating a deep visual tree.
The TreeView also now exposes selection change events and commands for single and multiple selection scenarios.
<material:TreeView
ItemsSource="{Binding Nodes}"
SelectedItem="{Binding SelectedNode}"
SelectedItemChangedCommand="{Binding SelectedNodeChangedCommand}" />
Learn more in the TreeView documentation.
Related PRs:
DataGrid improvements
DataGrid receives two useful improvements in v3.
You can hide column headers with ShowHeaders:
<material:DataGrid
ItemsSource="{Binding Items}"
ShowHeaders="False" />
You can also exclude properties from auto-generated columns with [DataGridIgnore]:
public class Person
{
public string Name { get; set; }
[DataGridIgnore]
public string InternalNote { get; set; }
}
Learn more in the DataGrid documentation.
Related PRs:
Input and dialog refinements
v3 also improves smaller but important input and dialog experiences:
MultiplePickerFieldadds chip and checkbox styling options.TextFieldadds anIsSpellCheckEnabledtoggle.InputFieldsupports formatted floating titles throughTitleFormattedText.- Custom view dialogs can now be cancellable with a
Task<bool>result. - Input clear icons better follow theme changes and initial values.
Related PRs:
- #1025 Add cancellable custom view dialogs
- #1036 Dialog checkboxes, MultiplePickerField chip styling
- #1037 Fix InputField formatted title support
- #1038 Add spell check toggle to TextField
- #1040 Fix InputField clear icon theme updates
- #1045 fix: show TextField clear button for initialized text
Important fixes
v3 includes several fixes that should be noticeable in production apps.
DataGrid Android Release crash
A DataGrid crash that appeared in Android Release builds was fixed.
Related PR:
DataAnnotations and compiled bindings
DataAnnotationsBehavior now works better with compiled and typed bindings, including nested paths, and avoids duplicate validation messages from previously applied validations.
Related PR:
Form dialogs validate before closing
Built-in form dialogs now wait for form validation before closing. Invalid forms stay open so the user can correct validation errors.
Related PRs:
Binding and visual-state fixes
Several binding and visual-state issues were fixed:
DropdownField.SelectedItemis now TwoWay by default.TabViewcached content now gets the expected binding context.EditorFieldpreserves text color across theme changes.ButtonViewno longer keeps stale pressed state after navigation.- Transparent
ButtonViewbackgrounds are preserved on press.
Related PRs:
- #1011 fix: preserve EditorField text color across theme changes
- #1026 Fix DropdownField selected item binding
- #1035 Fix TabView content binding context
- #1046 Fix stale button pressed state after navigation
- #1047 fix: preserve transparent ButtonView backgrounds on press
Dialog and blur stability
The default dialog close flow, CommunityToolkit dialog rendering, and blur platform effects were stabilized.
Related PRs:
- #1018 Stabilize default dialog close flow
- #1021 Fix CommunityToolkit dialog double border rendering
- #1022 Stabilize blur platform effects
Upgrade notes
v3 includes breaking changes for apps that depend on older target frameworks or custom implementations of UraniumUI extension points.
Before upgrading, review the Migration Guide to v3.0, especially if your app uses:
- .NET 9 target frameworks.
DatePickerFieldbindings to non-nullableDateTimeproperties.- a custom
IDialogServiceimplementation. - a custom
IDropdownimplementation. - TreeView internals such as
TreeViewNodeHolderVieworAllNodeViews. - custom form dialog code that closes immediately after calling
Submit().
Related milestone
You can view the full v3.0 milestone PR list on GitHub: