This release is bits that were announced at UnoConf in September, and it's a big one! It contains lots of new features, improvements, and bug fixes.
This release is now a community effort, thanks to Hacktoberfest, an also to community contributors such as @MartinZikmund, @pkar70, @kakone, @pdecostervgls, @gevart and all the Uno Team people!
Note: To install the latest Visual Studio Extension to use XAML Hot Reload, you'll need to do it from the release files below for the next few days, as the release there is still 1.45. We're discussing publication issues with the Microsoft VS Marketplace team about that, we'll update the release notes accordingly.The VSIX is now updated in the marketplace!
XAML Hot Reload for iOS, Android and WebAssembly
XAML Hot Reload is now supported, giving ability to design the UI of a running application directly from Visual Studio. Best of all, it can update multiple platforms at once!
Head to this guide to get started.
Dark mode support
ThemeResources support to enable Dark Theme has been included, with automatic detection on iOS, Android and WebAssembly. It's not yet supporting live update from one theme to another, but this is coming soon!
You can view the results of this support in the Uno Calculator (WebAssembly, App Store and Play Store), in the Xaml Controls Gallery WebAssembly App, and the Windows Communit Toolkit WebAssembly App.
Pointer and Manipulation events
This release adds extensive support for Pointer events and Manipulation events, paving the way for more advanced controls support such as data grids, and other interactive controls.
GitPod WebAssembly development support
GitPod enables very interesting scenarios for friction-less development with Uno, as well as contributing to Uno. Because there is nothing to install, and that everything runs in your browser, it lowers the barrier to entry for developing, as there's no step of "setting up the environment" that can take such a long time on some cases.
GitPod also enables live PR validations, with the pre-build features, allowing to test the live bits of a PR inside of a running VS Code instance, simply by clicking on the "review in GitPod" button in every PR.
Get started [here with this guide].(https://github.com/unoplatform/uno/blob/master/doc/articles/features/working-with-gitpod.md).
Visual Studio 4 Mac compatibility for iOS and Android
Building an app for iOS and Android in Visual Studio for mac is now supported, with initial support for XAML intellisense, in release 8.4.
Uno Platform WebAssembly Renderers for Xamarin.Forms
This release also enables the support for WebAssembly Renderers for Xamarin Forms 4.3.
Other additions
- Large improvements in
UIElement
clipping behavior - Support for hardware APIs such as
Windows.Devices.Lights.Lamp
,Geolocator
,Gyrometer
,Magnetometer
,Accelerometer
,VibrationDevice
,Barometer
- Support for system apis
JumpList
,PhoneCallManager
,DisplayInformation
PathGeometry
andPolyLine
support for WebAssembly- XAML type conversions through
CreateFromStringAttribute
- Support for
ContentDialog
,PersonPicture
,TooltipService
,ToggleButton.IsThreeState
andTextBox.IsReadonly
(WebAssembly) VisualState
setters support for static, theme resources and template bound values
Lots of work has been done to make Uno more reliable, with the inclusion of UI and on-device unit testing for iOS, Android and WebAssembly as part of the PR process. Each PR is now validated by running an extensive set of tests through the uno.uitest cross-platform UI Testing library.
This release also includes updates that enable support for ReactiveUI (samples) and VLC
Here's the full list:
Features
- #2029 Support for MenuFlyoutItem.Click
- support /[file]/[name] format in ResourceLoader.GetForCurrentView().GetString()
- [#2039] Added support for Xaml type conversions using CreateFromStringAttribute.
- [#] Support for
Windows.Devices.Lights.Lamp
on iOS, Android. - #1970 Added support for
AnalyticsInfo
properties on iOS, Android and WASM - [#1207] Implemented some
PackageId
properties - #1919 Support for
PathGeometry
on WASM. - Support for
Geolocator
on WASM, improvements for support on Android, iOS - #1813 - Added polyline support for WASM and samples for all shapes
- #1743 - Added a change to make the
MarkupExtensionReturnType
optional - Added Dark and HighContrast theme resources, reacts to Dark/Light theme on iOS, Android and WASM automatically during the startup of the app if
RequestedTheme
is not set inApp.xaml
- Support for
Gyrometer
on Android, iOS and WASMReadingChanged
ReportInterval
- Support for
Launcher.QueryUriSupportAsync
method on Android and iOS - #1493 - Implemented the
Windows.Input.PointerUpdateKind
Enum. - #1428 - Add support for horizontal progressbars to
BindableProgressBar
on Android. - Add support for
Windows.Devices.Sensors.Magnetometer
APIs on iOS, Android and WASMReadingChanged
ReportInterval
- Add support for
Windows.UI.StartScreen.JumpList
APIs on Android and iOS- Includes
Logo
,DisplayName
andArguments
- The activation proceeds through the
OnLaunched
method same as on UWP
- Includes
- Refactored
DrawableHelper
to theUno
project - Add full implementation of
Windows.UI.Xaml.Input.InputScopeNameValue
on all platforms. - Add support for
Windows.Devices.Sensors.Accelerometer
APIs on iOS, Android and WASMReadingChanged
Shaken
ReportInterval
- Align
ApplicationData.Current.LocalSettings.Add
behavior with UWP fornull
and repeated adds - Add support for
Windows.ApplicationModel.Calls.PhoneCallManager
- Add support for
Windows.Phone.Devices.Notification.VibrationDevice
API on iOS, Android and WASM - Basic support for
Windows.Devices.Sensors.Barometer
- Support setting
Style
inline (e.g.<TextBlock><TextBlock.Style><Style TargetType="TextBlock"><Setter>...
) - [Wasm] Add support for
DisplayInformation
propertiesLogicalDpi
,ResolutionScale
,ScreenWidthInRawPixels
,RawPixelsPerViewPixel
, andScreenHeightInRawPixels
¸ - Permit
DependencyProperty
to be set reentrantly. E.g. this permitsTextBox.TextChanged
to modify theText
property (previously this could only be achieved usingDispatcher.RunAsync()
). - Add support for filtered solutions development for Uno.UI contributions.
- 132984 [Android] Notch support on Android
- Add support for Android UI Tests in PRs for improved regression testing
- Add static support for ThemeResources:
Application.Current.RequestedTheme
is supportedDark
andLight
are supported.- Custom Themes are supported. This let you specify
HighContrast
or any other custom themes.
(this is a feature not supported in UWP)// Put that somewhere during app initialization... Uno.UI.ApplicationHelper.RequestedCustomTheme = "MyCustomTheme";
FrameworkElement.RequestedTheme
is ignored for now.- Should be set when the application is starting (before first request to a static resource).
- Prevent possible crash with
MediaPlayerElement
(tentative) - Add support for
ContentDialog
, includingClosing
andClosed
events - Permit
DependencyProperty
to be set reentrantly. E.g. this permitsTextBox.TextChanging
to modify theText
property (previously this could only be achieved usingDispatcher.RunAsync()
). - Implement
TextBox.TextChanging
andTextBox.BeforeTextChanging
. As on UWP, this allows the text to be intercepted and modified before the UI is updated. Previously on Android using theTextChanged
event would lead to laggy response and dropped characters when typing rapidly; this is no longer the case withTextChanging
. - [WASM]
ComboBox
's dropdown list (CarouselPanel
) is now virtualized (#1012) - Improve Screenshot comparer tool, CI test results now contain Screenshots compare data
- Updated Xamarin.GooglePlayServices.* packages to 60.1142.1 for Target MonoAndroid80
- Updated Xamarin.GooglePlayServices.* packages to 71.1600.0 for Target MonoAndroid90
<ContentPresenter>
will now - as a fallback when not set - automatically bind to
TemplatedParent
'sContent
when this one is aContentControl
.
You can deactivate this behavior like this:FeatureConfiguration.ContentPresenter.UseImplicitContentFromTemplatedParent = false;
- Add support for
Selector.IsSynchronizedWithCurrentItem
- Add support for
CoreApplication.MainView
andCoreApplication.Views
- Add support for resolution of merged and theme resources from
ResourceDictionary
in code - Add non-failing StatusBar BackgroundOpacity and BackgroundColor getters
- Relax DependencyProperty owner validation for non-FrameworkElement
ToolTip
&ToolTipService
are now implemented.- #1352 Add support for
ThemeResource
s with different types (e.g.: mixingSolidColorBrush
andLinearGradientBrush
) - Add support for BitmapSource.PixelWidth and Height
- Preliminary support for
ColumnDefinition.ActualWidth
andRowDefinition.ActualHeight
. - Updated VisualTree of an app with Visibility for each items.
- Add support for
CompositionTarget.Rendering
event. - Add support for
IObservableVector<T>
inItemsControl
- [#1559] [#1167] Wasm: make the IsEnabled property inheritable.
- Full support of pointer events cf. routed events documentation
- Add support of manipulation events cf. routed events documentation
- Update CheckBox style to 10.0.17763
- Adds the support for
AutomationProperties.AutomationId
- #1328 Basic ProgressRing implementation for WASM
- Add support for
Windows.UI.Xaml.Controls.Primitives.LayoutInformation.GetAvailableSize
- Add support for Runtime Tests that require UI integration
- Enable iOS UI Tests
- Add support for
PersonPicture
- Add support for
VisualState
Setter
data binding, static resources and complex objects - Clipping to bounds of control is now more similar to UWP
- The feature flag
FeatureConfiguration.UseLegacyClipping
is now deprecated and not used anymore - XAML Hot Reload support for iOS, Android and Windows
- Add support for GitPod Workspace and prebuilds
- #880 Added added implicit conversion for double to Thickness
- Add Android support for
CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar
to programatically draw under the status bar - [WASM]
ScrollViewer.ChangeView
is now supported - [Wasm] Add the ability to focus a TextBox by clicking its header
- Add support for
ToggleButton.IsThreeState
andToggleButton.Indeterminate
- [Wasm] Add support for
TextBox.IsReadonly
Breaking changes
TextBox
no longer raises TextChanged when its template is applied, in line with UWP.TextBox.TextChanged
is now called asynchronously after the UI is updated, in line with UWP. For most usesTextChanging
should be preferred.- [Android]
TextBox.IsSpellCheckEnabled = false
is now enforced in a way that may cause issues in certain use cases (see https://stackoverflow.com/a/5188119/1902058). The old behavior can be restored by settingShouldForceDisableSpellCheck = false
, perTextBox
. TextBox.Text = null
will now throw an exception, as on UWP. Pushingnull
via a binding is still valid.- Projects targeting Android 8 must now use Xamarin.GooglePlayServices.* 60.1142.1 (60.1142.0 has been unlisted)
- Projects targeting Android 9 must now use Xamarin.GooglePlayServices.* 71.1600.0
- [iOS] UIWebView is deprecated and replaced with WKWebView (ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs . See https://developer.apple.com/documentation/uikit/uiwebview for more information.)
- [iOS] If you set the
ManipulationMode
to something else thanSystem
orAll
, the DelaysContentTouches is going to be disabled on all parentScrollViewer
- [#1237] Static resources defined in App.xaml were not processed and registered properly
This change might break the compilation for projects that define duplicate resources in other globally accessible resource dictionaries. Adjustments to remove duplicate resources may be necessary.
- [WASM] The tranform returned by
UIElement.TransformToVisual
is now including scale, rotation or any custom transformation that was declard on a parent element (transform was only including translate components)
Bug fixes
- #2093 Fix missing measurement option for polyline and polygon
- Font size, used for ComboBoxItems, are same as in ComboBox content (not smaller)
- #2023 Android WebView.NavigateToString doesn't throw exception even when string is very long.
- #2020
ContentControl
no longer display the datacontext type when ContentTemplate and content are empty - #1987 Missing XML comment warnings are disabled on generated code
- #1939 Handles nullables types in XAML file generator
- #1741 On Android,
ApplicationData.Current.[LocalFolder|RoamingFolder]
can now be used in the ctor of App.xaml.csThis change introduces a new constructor in
Windows.UI.Xaml.NativeApplication
that requests a delegate. In the Visual Studio Templates for Uno Platform, theMain.cs
for the Android, the constructor now provides() => new App()
instead ofnew App()
, you can do the same in your existing application. See this file for an example. - [#1767] Invalid
this
keyword generated forStoryboard.SetTarget
- [#1781] WASM Images are no longer draggable and selectable by default to match UWP
- #1771 Fix ".Uno" in project names resulted in build errors.
- #1531 Fix an issue with VirtualizePanelAdaptater by adding a cache where the ItemSources length change and created a OutOfRangeException
- [WASM] #1518 Fix Navigation Issue Where SystemNavigationManager.enable() is called twice and clear the stack history
- #1278 the XAML sourcegenerator now always uses the fully qualified type name to prevent type conflicts.
- #1392 Resolved exceptions while changing cursor color on Android P.
- #1383 resolve Android compilation errors related to Assets filenames: "Invalid file name: It must contain only"
- #1380 iOS head generated by Uno Solution Template now specifies MinimumOSVersion, in line with XF so first compile is successful.
- #1276 retrieving non-existent setting via indexer should not throw and
ApplicationDataContainer
allowed clearing value by callingAdd(null)
which was not consistent with UWP. - [iOS] Area of view outside Clip rect now allows touch to pass through, this fixes NavigationView not allowing touches to children (#1018)
ComboBox
drop down is now placed following a logic which is closer to UWP and it longer flickers when it appears (especilly on WASM)- #854
BasedOn
on a<Style>
inApp.Xaml
were not resolving properly - #706
x:Name
inApp.Xaml
's resources were crashing the compilation. - #846
x:Name
on non-DependencyObject
resources were crashing the compilation - [Android/iOS] Fixed generated x:uid setter not globalized for Uno.UI.Helpers.MarkupHelper.SetXUid and Uno.UI.FrameworkElementHelper.SetRenderPhase
- Fix invalid XAML x:Uid parsing with resource file name and prefix (#1130, #228)
- Fixed an issue where a Two-Way binding would sometimes not update values back to source correctly
- Adjust the behavior of
DisplayInformation.LogicalDpi
to match UWP's behavior - [Android] Ensure TextBox spell-check is properly enabled/disabled on all devices.
- Fix ComboBox disappearing items when items are views (#1078)
- [iOS] TextBox with
AcceptsReturn=True
crashes ListView - [Android/iOS] Fixed Arc command in paths
- Changing the
DataContext
of an element to a new value were pushing the properties default
value on data bound properties before setting the new value. - [Android]
.Click
on aButtonBase
were not raising events properly - #1350 Vertical Slider was inverting value when tapped
- TemplateReuse not called when dataContext is set
- [WASM] #1167 Apply
IsEnabled
correctly toTextBox
(innerTextBoxView
is now correctly disabled) - [Android/WASM] Fix MaxLength not respected or overwriting text
- Settings collection-based properties on root node in XAML were leading to C# compilation errors
- Properties on root node in XAML were not applied when there was no content (sub-elements)
- [Android] GroupedListviewHeaders were causing scrolling lag, missing flag
- Flyout that are than anchor but fit in page were defaulting to full placement.
- [iOS]Fixed DatePickerFlyout & TimePickerFlyout not being placed at the bottom
- [Android] Animated content is cut off/glitchy when RenderTransform translation is applied (#1333)
- #1409 Provide a better error-message on Page-Navigation-Errors
- Fix NRE when using custom
Pivot
templates. - Fix iOS CompositionTarget handler race condition
- [Wasm] Fix TextBoxView SelectionStart/SelectionEnd value parsing
- [Wasm] Don't fail on FrameworkElement.Dispose()
- [Android] ScrollViewer were no more clipping the scrollable area.
ComboBox
's ControlTemplate was requiring a binding to TemplatedParent for thex:Name="ContentPresenter"
control. Now aligned with UWP by making this binding in the control itself.- #1352
ThemeResource
bugfixes:StaticResource
not working insideResourceDictionary.ThemeDictionaries
- Using a
ThemeResource
on the wrong property type shouldn't raise compile-time error (to align with UWP)
- Fix layout bug in Image control.
- [#1387]
ComboBox
: Fix DataContext was propagated to<ContentPresenter>
when there was no selected item, causing strange display behavior. - #1354 fixed Recycler.State desync issue
- #1533 [Wasm] Fix measure caching for zero sized measure
- [iOS(iPad)]
ComboBox
: the combobox wasn't fully expanding vertically on first opening. Popup
&ComboBox
(and other controls usingPopup
) were not behaving properly whenIsLightDismissable
were set totrue
.- [Wasm] Fix unloaded UIElements are made visible if measured and arranged
- [Android] Fix java NRE handing touch events on detached view
- [Pivot] Add support for non PivotItem items
- #1557 Fix local DataContext on ContentDialog is overwritten
- [WASM] Fix display for multiple popups (e.g. ComboBox inside of ContentDialog)
- [Android] Fix invalid ImageBrush stack overflow with delayed image reuse
- CommandBar fixes (AppBarToggleButton, AppBarButton)
- Fix Symbols rendering in sample app
- Fix multiple invocations of OnLoaded when hosting a control in ItemsControl
- [Android] Fix glitchy animations inside ListView with transformed ancestor.
- Adjust
AppBar
andCommandBar
styles. - Adjust the Stretch mode of
BitmapIcon
content - Fix invalid Image size constraint
- [Android] MenuFlyout was misplaced if view was in a hierarchy with a RenderTransform
- Fix color refresh of
BitmapIcon
monochrome Foreground - [IOS] DatePickerFlyout min and max year were resetting to FallbackNullValue
- [Android] Fix bug in
ListView
when using anObservableCollection
as its source and usingHeader
andFooter
. - #1924 Fix Android
ListView.HeaderTemplate
(and.FooterTemplate
) binding bug when changingHeader
andFooter
. - 164480 [Android] fixed a text wrapping issue caused by layout height desync
- [Wasm] Fix unable to reset
Image.Source
property - #2014 Fix iOS Picker for ComboBox not selecting the correct item.
- [iOS] #977 Fix exception when setting MediaPlayerElement.Stretch in XAML.
- #1708 Fix initial Flyout placement and window resize placement
- [Android] #2007 ComboBox does not take Window.VisibleBounds to position its popup
- [Wasm] Fixes the measure of a TextBoxView #2034 #2095
- [Android] [Wasm] Recent clipping improvements were incompleted. Fixed a case where a control was allowed to draw itself to use more than available place in the arrange phase.
- [iOS] Fix negative result value of TimePicker. Now value range is limited from 0 to 1 day
- #2129 WebAssembly Bootstrapper update to remove the implicit .NET 4.6.2 dependency, and support for long file paths on Windows.
- #2147 Fix NRE in android-specific TextBox.ImeOptions
- #2146 [iOS] ListView doesn't take extra space when items are added to collection