Build Mobile, Desktop and WebAssembly apps with C# and XAML. Today. Open source and professionally supported.
APACHE-2.0 License
Published by jeromelaban over 3 years ago
The new 3.8 release ports additional WinUI controls and layouts, such as the often-requested CalendarDatePicker
control, to all Uno-supported platforms getting us one huge step closer to realizing the #WinUIEverywhere vision.
In addition, the new release brings up to 2x performance improvements in some scenarios, realized from the new Grid
implementation as well as DependencyObject
and UI Elements creation improvements. We also introduced new AOT and WebAssembly features, built on top of recently released Microsoft work on .NET.
On the Linux front we are pleased to enable new scenarios so you can target embedded systems using the FrameBuffer as well.
In addition to new UI and Performance features and improvements, the team has closed many issues. Closing issues timely is crucial in further fueling large projects enabling customers like Kahua to port a massive line of business applications from desktop to Web. We are particularly proud of the fact that with every release we close more issues than have been opened in the previous period; it shows a healthy and quickly maturing open-source project. Our huge thanks go to all our contributors @xperiandri, @crixerker, @mterwoord, @scolapicchioni, @trungnt2910, @johnthepro and @pkar70!
See all the detailed updates in our blog post.
.ShowLocalVisualTree()
by adding details about Grid/Canvas positioning. 96b8086[Skia] Remove weak registrations in UIElement constructor e84146f
[Wasm] Don't deserialize unused TS interop output 52f5b5d
[Wasm] Improve UIElement.Visibility
set to Collapsed
0be67af
[Wasm] Improve SetBackgroundBrush performance 14d996e
[Wasm] Improve text set color 07c794b
[Wasm] Register on ScrollContentPresenter pointer events only when native d25f9cc
[Wasm] Restore conditional DO hard references b968add
Add various controls creation benchmarks 1de5dac
Build only one logger for static style methods f4651c9
Explicitly limit DependencyPropertyDetail array pool max length 34923c4
Generate Brush.Opacity
and RelativeTransform
DPs 516fbb6
Improve DependencyPropertyDetails performance 640a543
Initialize UIElement.KeyboardAcceleratorsProperty
lazily 61c4223
Make Grid.RowDefinitions
and ColumnDefinitions
lazy initialized feaad83
Make VisualState and VisualTransition lazy loaded 64a79fc
misc performance improvements on DependencyObjectStore
9c01d26
Move all UIElement TextHelpers to UIElement c1a776b
Push active system theme to ResourceDictionary 2322829
Reduce foreach/linq usage in pointers management d5b622a
Remove unused WeakReference read-back on creation 6cfe4c8
Skip ClearPointersStateIfNeeded during ctor 7d74f48
Use cached DependencyProperty comparer 6ef9e81
grid: Added more cases to Grid benchmark 3ae96b1
VisualState: Create VisualState.Setters
and StateTriggers
backing collections lazily 5c14003
Use for loops in DependencyObjectCollection 0f64934
grid: Added a new multidimension test to grid. 53b3618
fix!: Exclude Windows.UI.Xaml.UIElementExtensions from Xamarin platforms 3cbea4f
SetToMin()
/SetToMax()
were used in multi-eras calendars 9549557{x:Null}
syntax 1a6c2fdUno.UI.Runtime.Skia.Gtk
and FrameBuffer
aaf1809#
497ffa6[ActivePlatform]
in UI Tests works with NUnit's [TestCase]
d4ab54cSetter
is being refreshed on ElementNameSubject changes b48bf0fPublished by jeromelaban over 3 years ago
Uno Platform 3.7 expands our support for the newest WinUI, Project Reunion and Linux, all while continuing performance improvements for WebAssembly head.
This release includes:
SwipeControl
TextBox
supportWebAuthenticationBroker
for Androidand many contributors updates:
To all our contributors: Thank you!
For more details, visit our blog post.
<TextBlock>
were not properly displaying the ellipsis on text overflow, because the CSS requires the overflow: hidden to be applied. 160a506Published by jeromelaban over 3 years ago
The wait is over! The next generation Windows developer platform – WinUI 3 – has been officially released to the public, alongside Project Reunion 0.5. To empower you to have #WinUIEverywhere on the day it launches we are also releasing Uno Platform 3.6. Our appreciation goes to Microsoft WinUI team for keeping us posted on your progress, in order for us to have day-0 support for WinUI.
In addition to WinUI and Project Reunion support, we are also releasing highly-requested DatePicker and File Picking controls (Open, Save, Folder), a new Cupertino-like theme, OpenId Connect, WebAuthenticationBroker
and are continuing support Windows Community Toolkit and its newest release - 7.0! Lastly, we have restructured and added more documentation to our docs – one of the main improvements you asked for in our annual survey.
For more details, read the full release blog.
Here are some of this release features and improvements :
FileOpenPicker
, FileSavePicker
, FolderPicker
support (@MartinZikmund, @Arlodotexe)ApplicationLanguage.PrimaryLanguageOverride
(@carldebilly)DatePicker
and LoopingSelector
(@carldebilly)WebAuthenticationBroker
and OpenID Connect support (@carldebilly)DispatcherQueue
(@carldebilly)ScrollViewer
(@dr1rrb)ApiInformation.IsTypePresent
in conditional Xaml (@davidjohnoliver)ScrollViewer
for macOS (@dr1rrb)ResourceDictionary
performance improvements (30% improvement on worst case read) (@jeromelaban)BindingPath
performance and allocation improvements (@dr1rrb)And many bug fixes, with some highlights:
Here's the extended changelog:
This will change the default behaviour on how the Foreground property of the CommandBar is handled and applied against the different elements of the CommandBar
Published by jeromelaban over 3 years ago
Staying true to our #WinUIEverywhere mission, our 3.5 release provides day-zero support for WinUI 3 Preview 4 and it brings support for 4 new WinUI controls – Navigation View, Progress Ring, Pager and Expander. In addition, we are solidifying our existing support for SkiaSharp and Xamarin.Forms 5.
Read our blog post for more details about this release.
Calendar.YearAsString()
and Calendar.YearAsTruncatedString()
4a31447dotnet-new
classification to dotnet new templates 23f8ebbPublished by jeromelaban almost 4 years ago
This 3.4 release is about adding support for WinUI controls, such as the hierarchical NavigationView, InfoBar, RadioButtons, ItemsRepeater and determinate ProgressRing. We are following the footsteps of the WinUI team to align more of the controls Uno provides with what is supported on Windows.
The combination of controls we are releasing with 3.4 release, the recently-announced Infragistics controls for Uno Platform, and Syncfusion charting, will give you as a developer a great toolset to tackle single-source web, desktop and mobile applications.
As with each release, we have also added significant number of features and fixed many bugs, with the help of members from the community.
Visit our blog post for additional details.
Uno Platform has been including a version of the Navigation for quite a while in the Windows.UI.Xaml namespace. Recently, the WinUI team added support for an enhanced experience including hierarchical navigation, with the ability to expand and collapse menu items.
This new control is now available in the Microsoft.UI.Xaml namespace, to match with the Windows version of WinUI. The Windows.UI.Xaml version of the control will stay in Uno, but will not include additional features, only bug fixes as needed.
You can browse the documentation for the NavigationView on Microsoft docs.
The WinUI InfoBar control also has been imported in Uno Platform. It allows for applications to display app wide status messages to the users to be highly visible but non-intrusive, using customizable severity levels.
Here is an example of InfoBar visual:
You can browse the documentation for the InfoBar on Microsoft docs.
Yet another WinUI control, this time to allow the DataBinding of an items source to a list of RadioButtons, this control lets users select one option from a collection of two or more mutually exclusive, but related, options.
You can browse the documentation for the RadioButtons on Microsoft docs.
The ItemsRepeater is a new control from WinUI 2.x that provides an enhanced developer experience and end user experience when creating custom collection experiences using a flexible layout system, custom views, and virtualization.
We have ported the code from the ItemsRepeater to Uno, and it is useable on all our available platforms. It is used in Uno by the refreshed hierarchical NavigationView control, as well as the RadioButtons control.
Layouts are reusable components for which some (StaggeredLayout, WrapLayout) were released in Windows Community 6.1. Uno did not have support for the ItemsRepeater
at the time, but those will be available soon to be reused in Uno.
You can browse the documentation for the ItemsRepeater on Microsoft docs.
WinUI 2.5 added support for a determinate mode for the progress ring, allowing for an arbitrary progress value to be provided. This control uses Lottie under the hood, and benefits from additional changes we included to get color changes in Lottie files.
You can browse the documentation for the ProgressRing control on Microsoft docs.
There are no breaking changes for this release of Uno, but you'll need to upgrade the Uno.Core package to 2.1 in the UWP project to avoid nuget restore warnings.
This upgrade has been introduced to improve the compatibility of Uno.UI with Visual Studio 2019 16.9 Previews.
You can view below the full changelog of this release
Published by jeromelaban almost 4 years ago
WinUI 3.0 Preview 3 is a big step towards shipping the final version of WinUI.
We at Uno Platform team are happy to report that Uno Platform already works with the latest WinUI preview. Our sincerest thanks to WinUI team who keeps us posted on their progress and allows us to make modifications to Uno so that our joint developer base can use the latest and greatest bits right away.
In addition to shipping support for Preview 3 the team also managed to ship additional features in our 7th release in 2020.
We’re aligning the API surface from WinUI 3.0 Previews in Uno, alongside adding support for the WinUI Desktop project template. The Desktop template enables WinUI applications to use the full Win32 and WinRT API with .NET 5, without running in the UWP sandbox.
To create an application using the WinUI 3 API set, run the following command:
dotnet new -i Uno.ProjectTemplates.Dotnet
dotnet new unoapp-winui -o MyApp
This will create a brand-new project to experiment with WinUI 3 Preview 3 and Uno.
You can find up-to-date information about dotnet new templates in our documentation.
A few points about the WinUI 3 Preview support:
Uno is now providing Android 11 support and deprecates the use of Android 9, which Google stopped supporting as of November 1st.
If your application was targeting the API level 28 (Android 9), you can upgrade to Android 10 (Level 29) or 11 (Level 30) in your application’s property pages.
Keyboard was a big ask from the community, and the first consumer of this feature is the Uno Calculator for Linux. We’ve updated the Snapped application to enable keyboard support to input numbers and operators.
We've also updated our appimage support for the Linux Calculator, in case you're on a distribution that does not support snap, or snap is not installed.
To upgrade to latest release of Uno Platform please update your packages to 3.3 via your Visual Studio NuGet package manager! If you are new to Uno Platform, the best way to get started is following our official getting started guide.
Here's the full changelog:
CoreWindow.[KeyUp|KeyDown]
and UIElement.[KeyUP|KeyDown]
(0e89271)<Application.Resources>
<MapResources xmlns="using:Uno.UI.Maps"/>
</Application.Resources>
This resource dictionary provides the required MapControl style.
Published by jeromelaban almost 4 years ago
The 3.2 release is loaded with feature and performance improvements. Most of the release focused on upcoming .NET 5 and all benefits Uno Platform gets from building on top of it. However, we are also releasing improvements to the controls and tooling we introduced in previous releases.
The .NET team has been working hard to add WebAssembly support for .NET 5, and we’ve been able to leverage this work to update Uno and provide a preview of this support.
This update gives the ability for Uno Platform apps to use the .NET 5 APIs and features, like C# 9.0 and its source generators, records, pattern matching and others interesting features.
But that’s not all! The .NET 5 WebAssembly support comes with the IL interpreter runtime, but also brings the AOT support that was already present in the Mono Runtime that Uno Platform currently uses, allowing Uno WASM implementation a performance boost of 7-15x compared to the IL interpreter.
To get this support, the Uno WebAssembly Bootstrapper has been updated to include the AOT runtime for .NET 5, while keeping the support for the Mono 6.x WebAssembly support (using the netstandard2.0 target framework for projects).
You can view additional benchmarks on our blog post.
Drag and drop elements within the application is now supported. Like UWP, any element flagged with the CanDrag
property set now has the ability to build a DataPackage
and customize the UI for the drag operation. Any element configured with the AllowDrop
flag can now receive the drag events.
We’ve also added the ability to drag and drop from and to other apps for Skia for Windows and macOS (Thanks @robloo!).
We’ve updated the Uno playground with new samples for you to experiment with:
You can now use the muxc”
namespace to access Microsoft.UI.Xaml.Control
enabled controls.
AnalyticsInfo
, PackageId
(Skia/Wasm)StorageFolder
: GetFilesAsync()
, GetFoldersAsync()
, GetItemsAsync()
(Thanks @pkar70!)UISettings
GetColorValue
and AnimationsEnabled
(Thanks @MartinZikmund!)Windows.Storage.PathIO
and many Windows.Storage
APIsYou'll find below the full changelog:
Published by jeromelaban almost 4 years ago
The 3.1 release is our 6th release in 2020! In our 2019 survey you had asked to release more often and we hope we have delivered.
In year 2019, we had a total of 4 releases and in 2020 we are already up to 6. We also hope to have at least one more release by the end of the year!
The 3.1 release is special not only because of the new scenarios it unlocks, but also because of significant community contributions we are able to ship – thanks a lot to @robloo, @DanSiegel and @MartinZikmund for your contributions.
For this 3.1 release, we were able to add over 70 features and close over 140 code and documentation issues. Let’s unpack the release.
TabView
and TreeView
controls for Skia and WebAssembly, the other platforms are coming. (Thanks @MartinZikmund)ScrollViewer
XAML ScrollBars
for WebAssembly and Skia.vsconfig
support to suggest VS features to install, and Skia Backend templates.StorageFile.GetFileFromApplicationUriAsync
, to use large assets packaged with the application, something particularly useful in the WebAssembly context.ColorPicker
support (iOS/Android) (Thanks @robloo)Canvas.ZIndex
x:Bind
plain C# objects bindings, as well as Bindings.Update()
Windows.Globalization.Calendar
updates, paving the way for Date and Time pickersFolderPicker
support for macOS (Thanks @MartinZikmund)BadgeNotifications
for Android and iOS (Thanks @MartinZikmund)Page
supports background brushesNavigationView
navigation items bindingAnd finally, the whole new Prism 8 templates updates for the dotnet new
experience.
Here's the detailed change log for this release:
StorageFile.GetFileFromApplicationUriAsync
80262f0ContentDialog
, Resource
, CustomControl
and UserControl
VS 2019 templates. c2ca533Canvas.ZIndex
to Wasm platform b857844dotnet new
0c6a958ScrollViewer
6a3839bAnalyticsInfo
a21ed13ApplicationData.Local
path to use proper locations under unix c53e429TextBox.Text
property were always treated as a TwoWay
binding. d2b0b80<Border>
. 2e08a70CoreWindow.PointerCursor
563f6ffDatePickerFlyout.Date
is not populated properly 1c271b5XamlControlsResources
597ca36Assembly.Load
during startup 39f4ffbPublished by jeromelaban about 4 years ago
Here's the amazing Uno 3.0 release, again packed with features, bug fixes and performance improvements.
This release is also the first in a long time to introduce binary breaking changes, yet with minimal behavior and code breaking changes. Rebuilding your application using Uno.UI 3.0 will generally be enough, with a few adjustments to the configuration. You can visit the documentation for more information.
Among the major features:
ScrollViewer
improvements, such as XAML ScrollBar
ResourceDictionary
and implict styles updatesDisplayInformation
support for DPI and orientation changesMidiInPort
support (iOS, Android, WebAssembly)AnimatedVisualPlayer
), SplitButton
x:Bind
support for eventsFileIO
updates to support Buffer
, DataReader
, DataWriter
CustomXamlResourceLoader
and CustomResource
NetworkInformation
and statusWe've also improved the performance of the DependencyObject
and DependencyProperty
classes, making it faster for code accessing dependency properties by their C# accessor through caching and O(1) property access.
You'll also notice below a large set of changes related to the addition of the Skia backend, which are to be released in preview for Uno.UI 3.1 as we add new features. The changes for the support of Skia largely impacted the support for WebAssembly, making it a good choice to include in Uno 3.1 and avoid including breaking changes. These changes include the introduction of the Uno.UI.WebAssembly
package that needs to be added to the head WebAssembly project. For more information visit the documentation.
On the breaking changes front, for which most of the code will not be affected:
UIElementCollection
and Panel.Children
. Some elements such as Image
are now getting the appropriate base class.INotifyPropertyChanged
() => new App()
lambdaHave fun with Uno 3.0!
dotnet new
74d2518dotnet new
605d9a6FadeInThemeAnimation
+ FadeOutThemeAnimation
. 9d3da6eApplication.Suspending
8fa27db, closes #1165 #3120CustomResource
markup and CustomXamlResourceLoader 2020be3Promise<string>
and awaits it. dede46ddotnet new unoapp-winui
support 095fe86stackalloc
clauses has been move out of loops to prevent leaks, per Standard ECMA-334 Standard december 2001, section 25.7. 7209448On Android only, the NativeScrollContentPresenter continues to implement IFrameworkElement, since it uses the Layouter to arrange its children which is tightly coupled to IFrameworkElement.
INotifyPropertyChanged
interface on your class explicitly.FeatureConfiguration.Binding.IgnoreINPCSameReferences = true;
This is a one-line fix in app code (normally Main.cs):
: base(new App(),
should be replaced by : base(() => new App(),
Adjusted from GetType() to typeof(NavigationViewItem) for NavigationViewItem. This matches Win.UI.Xaml behaviour, though granted the MS.UI.Xaml code looks more like GetType().
Partial implementation of correct style handling:
This replaces the previous approach (only a single copy of a resource was possible/permitted per app).
Uno's new approach doesn't exactly match UWP (parse-time XAML scope resolution), instead it uses a 'two-speed' approach where the lookup is made in App.Resources when the XAML is initialized, and then again at load-time based on the resources in scope in the local tree.
<UnoSkipUserControlsInVisualTree>true</UnoSkipUserControlsInVisualTree>
IFrameworkElement
0508640__WASM__
a8ecb66localStorage
ab8d2a0, closes #2923.Play()
) before being loaded, a concurrency issue was preventing the animation from starting once loaded. 01a4bddSystemErrorTextColor
was not of right color on Light
theme (yellow instead of red). 9d167f5Published by jeromelaban over 4 years ago
This exciting new release is all about enabling development on macOS and making apps for macOS!
We've been working on this for a while now, and with the help of contributors (thanks @MartinZikmund!), we're now announcing the preview of Uno's macOS support.
To validate that our macOS support is taking shape, we ported over the Uno Calculator over, and it's now available on the mac App Store.
There are lots to do to get to the full potential of macOS through Uno's abstractions, yet it will allow you to start developing for macOS.
To create a new application with Uno in Visual Studio for mac:
Open a terminal
Type the following to install the Uno templates:
dotnet new -i Uno.ProjectTemplates.Dotnet::2.4
Type the following to create a new project:
dotnet new unoapp -n MyUnoApp
Open the project in Visual Studio
To build for each platform:
For macOS:
For iOS:
For Android:
The implementation of the macOS support is Uno is heavily based on the iOS support. The reason for this is UIKit for iOS being very close to AppKit on macOS. This allowed us to reuse large portions of the code from iOS and adjust to fit macOS’s behavior.
Yet, there are some very subtle differences in the implementation though, where methods such as UIKit.SizeThatFits() or UIKit.SetNeedsLayout() are either absent or behaving very differently. That may be why you’ll notice parts that need so fit and finish and we encourage you to open issues on our GitHub repo.
You may ask why we did not choose to go the Catalyst route, and you’d be right. The main reason is the lack of support for Catalyst from Xamarin, and if you want to chime in this issue if this is of interest to you.
At this time, and contrary to what’s available for iOS, debugging and deploying a macOS app must be done through Visual Studio for mac, while only building is possible in Visual Studio 2019 for Windows. This feature is missing from the Xamarin tooling, and if you want that support to be added, you can vote on this issue on the Visual Studio Community site.
Published by jeromelaban over 4 years ago
This release focuses on adding the support for Android10 and AndroidX, WinUI's RadialGradientBrush and ProgressRing, Prism Library, and a number of bug fixes that you can see in the change log below.
Using the API level 29 allowed us to review our TextBlock
implementation for Android and replace some reflection code required to access hidden APIs for MaxLines by official APIs that are now available. While being safer going forward, this approach also provides performance gains for this crucial control.
As the Google Play store won’t accept applications built for Android 8 (SDK 27) since November 2019, we’re removing support for that SDK to simplify our codebase and devops pipelines. To use Uno 2.3 or higher, your application needs to target Android SDK 28 (android 9) or 29 (Android 10).
If your application makes explicit use of support libraries, you’ll need to update those to Android X, and there’s some good documentation for it. Shout out to the Xamarin team, their migration tooling worked really well.
Among other notable changes:
Windows.Data.Xml.Dom
has been added (by @MartinZikmund, an essential part of the API that many other WinRT and WinUI API use)dotnet new unoapp-prism
template.The Uno.Wasm.Bootstrapper 1.2 has been released and removes the unfriendly use of “DotNetCliToolReference” that could not be updated via the Visual Studio interface. It includes all the recent improvements such as Windows AOT, Visual Studio 16.6 debugging, .NET interpreter performance improvements, macOS and Linux support, and Visual Studio Code support.
To upgrade from previous versions of the bootstrapper:
NotImplemented
Attribute for TopAppBar
and BottomAppBar
ccfa190Progress
, IsPlaying
& Duration
9e11da1Progress
, IsPlaying
and Duration
c0887fbWindows.Data.Xml.Dom
APIs 6f901e1dotnet new
template 18cccbbNotImplemented
attributes 6362cfbWebView.DocumentTitle
on macOS 0f54709CurrentOrientation
support 1d0a89aNativeOrientation
dfd6ceaPasswordBox
7eee1efIsPasswordRevealButtonEnabled
for PasswordBo
x b249253SecureTextBox
for PasswordBox
7e826cbPasswordBox
implementation a087a21ComboBox
on macOS 3ede85cUno upgraded from:
- Xamarin.Android.Support.v4
- Xamarin.Android.Support.v7.AppCompat
- Xamarin.Android.Support.v7.RecyclerView
To :
- Xamarin.AndroidX.Legacy.Support.V4
- Xamarin.AndroidX.AppCompat
- Xamarin.AndroidX.RecyclerView
- Xamarin.AndroidX.Fragment
RuntimeInformation
bd00e78dotnet new
app template ff5171bPublished by jeromelaban over 4 years ago
The Uno 2.2 release is packed with new features, performance improvements and bug fixes, even if it's closely following the 2.1 release!
We're also hard at work on adding support for macOS apps (Thanks @MartinZikmund), and while we still do not have anything to announce, it's taking shape!
Among the implemented features, you'll find:
MenuFlyout
, UIElement.ContextFlyout
and MenuBar
ScrollBar
dotnet new unoapp
and macOS templatesImageSource.SetSourceAsync
support for WebAssembly (Thanks @SuperJMN)ColorAnimation
Pedometer
for iOS and Android (Thanks @MartinZikmund)PointerWheelChanged
) on WebAssemblyDropDownButton
from WinUI 2 (Thanks @MartinZikmund)ms-appdata
paths in Image
, MediaPlayer
(Thanks @MartinZikmund)Uno is now built using C# 8.0 and VS 16.5 on Azure Devops hosted agents, which means that AndroidX and Android 10 support is close by.
And finally, many of the recent updates were targeted at improving the behavior of controls in the Windows Community Toolkit, with enabling DataGrid, TabView and Expander controls. On the topic of the DataGrid, there's still lots of work to be done, particularly around performance under WebAssembly, but this release updates now make the control useable.
dotnet new unoapp
and macOS templates (a591d69)UIElement.ContextFlyout
(5640745)The Uno.Xaml
parser is now always used
The System.Xaml assembly is not always available, particularly when building under .NET Core.
The monoandroid80 target is not available anymore.
It has been deprecated by Google.
Uno is now built using VS2019 16.4
It does not support building Xamarin iOS/Android applications with Visual Studio 2017.
Linker errors may occur such as:
Java.Interop.Tools.Diagnostics.XamarinAndroidException: error XA2006: Could not resolve reference to 'System.Collections.Generic.Queue`1'
(defined in assembly 'Uno.UI, Version=255.255.255.255, Culture=neutral, PublicKeyToken=null') with scope 'mscorlib, Version=2.0.5.0,
Culture=neutral, PublicKeyToken=7cec85d7bea7798e'.
commandbar: Alignment of native CommandBar.Content used to be Stretch
/Stretch
and is now aligned with Top
/Left
on UWP.
Use CommandBar.HorizontalContentAlignment
and first element of content's VerticalAlignment to control.
UnsetValue
(27e0fc1)ComboBox.IsPopupFullscreen
behavior (5ac0026)TextElement.Background
cannot be set to null (d6dfec8)VisibleBoundsPaddings
continue to work after a resize. (c88ab58).forceLayout()
only when appropriate. (c4d26e3)ElevatedView
recopy its TemplatedParent
. (e894ffb)Published by jeromelaban over 4 years ago
Uno Platform 2.1 release is packed with over 50 new features allowing for increased productivity as well as getting you up and running with Surface Duo. In addition to bigger milestones such as x:Bind, the TwoPaneView and NumberBox controls we also shipped another 50 new features and closed 45 issues you raised.
Among many other updates:
x:Bind
functions (with BindBack, DefaultBindingMode)TwoPaneView
controlElevatedView
in the toolkit to add shadows around controlsGrid.ColumnSpacing
and Grid.RowSpacing
UIElement.RightTapped
and Holding
You'll also notice some progress on the macOS support, but nothing concrete to share at this point.
Big thank you to all our contributors for the support !
Here's the full change log:
ElevatedView
in the Uno.Toolkit
to provide elevation & rounded corners on all platforms10.0.18362.0
)Application.Current.Exit
Windows.Storage.FileProperties.BasicProperties.DateModified
FontIcon
on macOSPhoneCallManager.ShowPhoneCallUI
on macOSShowComposeSmsMessageAsync
on macOSFlyout
on macOSHingeAngleSensor
for Surface DuoGeolocator
on macOSClipboard
get/set Text content on macOSApplicationView.Title
on Android and macOSAnalyticsInfo
on macOSTryEnterFullScreenMode
and ExitFullScreenMode
on WebAssemblyMessageDialog
on macOSKnownFolders.MusicLibrary
and VideosLibrary
StorageFile.DateCreated
ApplicationView.IsScreenCaptureEnabled
on AndroidStorageFile.DeleteAsync()
PointerDown
, PointerUp
PointerEntered
, PointerExited
and PointerMoved
events on macOSLauncher
API on macOS, support for special URIsEmailManager.ShowComposeNewEmailAsync
StorageFolder.CreateFileAsync(string path)
string
value in a StaticResource
when using `CreateFromStringAttribute'FeatureConfiguration.ScrollViewer.AndroidScrollbarFadeDelay
Grid.ColumnSpacing
and Grid.RowSpacing
Popup.LightDismissOverlayMode
, as well as DatePicker.LightDismissOverlayMode
and Flyout.LightDismissOverlayMode
. To modify the background color of the Overlay see Popup.md, DatePicker.md, TimePicker.md and Flyout.mdTransformToVisual
now returns a real transform to convert coordinates between views (was only returning a translate transform to offset the origin of controls)NumberBox
UIElement.RightTapped
event (The context menu won't appear anymore on WASM, except for the TextBox
)UIElement.Holding
eventScrollViewer
LinearGradientBrush
ApplicationView.GetSpanningRects
Uno.Foundation.Extensibility.ApiExtensibility
and ApiExtensionAttribute
Uno.UI.DualScreen
packagex:Bind
functions and BindBack
Popup
by default. Can be enabled through FeatureConfiguration.Popup.UseNativePopup
set to false (See #2533 for more details)IconElement.AddIconElementView
is now internal
so it is not accessible from outside.ListViwItem
is now the NativeListViewBase
(was the ListView
it self) as described here https://github.com/unoplatform/uno/blob/master/doc/articles/controls/ListViewBase.md#difference-in-the-visual-tree
<RenderTransform>
on an image was producing an incorrect layout result.CornerRadius
in default ComboBox
styleDesignMode.DesignMode2Enabled
no longer throws (is always false
on non-UWP platforms)ApplicationData
on MacOS, added support for LocalSettings
DisplayInformation
leaks memoryIsEnabled
from false to true on Control
inside another Control
didn't workListView
containing a horizontal ScrollViewer
: horizontal scrolling is difficult, only works when the gesture is perfectly horizontalMargin
ViewBox
no longer alters its child's RenderTransform
LostFocus
Value to UpdateSourceTrigger
EnumMethodName
value for `CreateFromStringAttribute' if it's not fully qualified it the codeNavigationView.ItemSource
scenario (https://github.com/unoplatform/uno/issues/2477)TransformGroup
not workingSelector
support for IsSelected (#1606)Layer
TextBlock.TextDecorations
is not updating properlyXamlBindingHelper
for GridLength
and TimeSpan
ListView
resourcesPublished by jeromelaban almost 5 years ago
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 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.
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.
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 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).
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.
This release also enables the support for WebAssembly Renderers for Xamarin Forms 4.3.
UIElement
clipping behaviorWindows.Devices.Lights.Lamp
, Geolocator
, Gyrometer
, Magnetometer
, Accelerometer
, VibrationDevice
, Barometer
JumpList
, PhoneCallManager
, DisplayInformation
PathGeometry
and PolyLine
support for WebAssemblyCreateFromStringAttribute
ContentDialog
, PersonPicture
, TooltipService
, ToggleButton.IsThreeState
and TextBox.IsReadonly
(WebAssembly)VisualState
setters support for static, theme resources and template bound valuesLots 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:
Windows.Devices.Lights.Lamp
on iOS, Android.AnalyticsInfo
properties on iOS, Android and WASMPackageId
propertiesPathGeometry
on WASM.Geolocator
on WASM, improvements for support on Android, iOSMarkupExtensionReturnType
optionalRequestedTheme
is not set in App.xaml
Gyrometer
on Android, iOS and WASM
ReadingChanged
ReportInterval
Launcher.QueryUriSupportAsync
method on Android and iOSWindows.Input.PointerUpdateKind
Enum.BindableProgressBar
on Android.Windows.Devices.Sensors.Magnetometer
APIs on iOS, Android and WASM
ReadingChanged
ReportInterval
Windows.UI.StartScreen.JumpList
APIs on Android and iOS
Logo
, DisplayName
and Arguments
OnLaunched
method same as on UWPDrawableHelper
to the Uno
projectWindows.UI.Xaml.Input.InputScopeNameValue
on all platforms.Windows.Devices.Sensors.Accelerometer
APIs on iOS, Android and WASM
ReadingChanged
Shaken
ReportInterval
ApplicationData.Current.LocalSettings.Add
behavior with UWP for null
and repeated addsWindows.ApplicationModel.Calls.PhoneCallManager
Windows.Phone.Devices.Notification.VibrationDevice
API on iOS, Android and WASMWindows.Devices.Sensors.Barometer
Style
inline (e.g. <TextBlock><TextBlock.Style><Style TargetType="TextBlock"><Setter>...
)DisplayInformation
properties LogicalDpi
, ResolutionScale
, ScreenWidthInRawPixels
, RawPixelsPerViewPixel
, and ScreenHeightInRawPixels
¸DependencyProperty
to be set reentrantly. E.g. this permits TextBox.TextChanged
to modify the Text
property (previously this could only be achieved using Dispatcher.RunAsync()
).Application.Current.RequestedTheme
is supported
Dark
and Light
are supported.HighContrast
or any other custom themes.// Put that somewhere during app initialization...
Uno.UI.ApplicationHelper.RequestedCustomTheme = "MyCustomTheme";
FrameworkElement.RequestedTheme
is ignored for now.MediaPlayerElement
(tentative)ContentDialog
, including Closing
and Closed
eventsDependencyProperty
to be set reentrantly. E.g. this permits TextBox.TextChanging
to modify the Text
property (previously this could only be achieved using Dispatcher.RunAsync()
).TextBox.TextChanging
and TextBox.BeforeTextChanging
. As on UWP, this allows the text to be intercepted and modified before the UI is updated. Previously on Android using the TextChanged
event would lead to laggy response and dropped characters when typing rapidly; this is no longer the case with TextChanging
.ComboBox
's dropdown list (CarouselPanel
) is now virtualized (#1012)<ContentPresenter>
will now - as a fallback when not set - automatically bind toTemplatedParent
's Content
when this one is a ContentControl
.FeatureConfiguration.ContentPresenter.UseImplicitContentFromTemplatedParent = false;
Selector.IsSynchronizedWithCurrentItem
CoreApplication.MainView
and CoreApplication.Views
ResourceDictionary
in codeToolTip
& ToolTipService
are now implemented.ThemeResource
s with different types (e.g.: mixing SolidColorBrush
and LinearGradientBrush
)ColumnDefinition.ActualWidth
and RowDefinition.ActualHeight
.CompositionTarget.Rendering
event.IObservableVector<T>
in ItemsControl
AutomationProperties.AutomationId
Windows.UI.Xaml.Controls.Primitives.LayoutInformation.GetAvailableSize
PersonPicture
VisualState
Setter
data binding, static resources and complex objectsFeatureConfiguration.UseLegacyClipping
is now deprecated and not used anymoreCoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar
to programatically draw under the status barScrollViewer.ChangeView
is now supportedToggleButton.IsThreeState
and ToggleButton.Indeterminate
TextBox.IsReadonly
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 uses TextChanging
should be preferred.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 setting ShouldForceDisableSpellCheck = false
, per TextBox
.TextBox.Text = null
will now throw an exception, as on UWP. Pushing null
via a binding is still valid.ManipulationMode
to something else than System
or All
, the DelaysContentTouches is going to be disabled on all parent ScrollViewer
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.
UIElement.TransformToVisual
is now including scale, rotation or any custom transformation that was declard on a parent element (transform was only including translate components)ContentControl
no longer display the datacontext type when ContentTemplate and content are emptyApplicationData.Current.[LocalFolder|RoamingFolder]
can now be used in the ctor of App.xaml.cs
This 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.
this
keyword generated for Storyboard.SetTarget
ApplicationDataContainer
allowed clearing value by calling Add(null)
which was not consistent with UWP.ComboBox
drop down is now placed following a logic which is closer to UWP and it longer flickers when it appears (especilly on WASM)BasedOn
on a <Style>
in App.Xaml
were not resolving properlyx:Name
in App.Xaml
's resources were crashing the compilation.x:Name
on non-DependencyObject
resources were crashing the compilationDisplayInformation.LogicalDpi
to match UWP's behaviorAcceptsReturn=True
crashes ListViewDataContext
of an element to a new value were pushing the properties default.Click
on a ButtonBase
were not raising events properlyIsEnabled
correctly to TextBox
(inner TextBoxView
is now correctly disabled)Pivot
templates.ComboBox
's ControlTemplate was requiring a binding to TemplatedParent for the x:Name="ContentPresenter"
control. Now aligned with UWP by making this binding in the control itself.ThemeResource
bugfixes:
StaticResource
not working inside ResourceDictionary.ThemeDictionaries
ThemeResource
on the wrong property type shouldn't raise compile-time error (to align with UWP)ComboBox
: Fix DataContext was propagated to <ContentPresenter>
when there was no selected item, causing strange display behavior.ComboBox
: the combobox wasn't fully expanding vertically on first opening.Popup
& ComboBox
(and other controls using Popup
) were not behaving properly when IsLightDismissable
were set to true
.AppBar
and CommandBar
styles.BitmapIcon
contentBitmapIcon
monochrome ForegroundListView
when using an ObservableCollection
as its source and using Header
and Footer
.ListView.HeaderTemplate
(and .FooterTemplate
) binding bug when changing Header
and Footer
.Image.Source
propertyPublished by jeromelaban about 5 years ago
Here's the XAML Hot Reload Preview 1 for Uno Platform!
To install this release, please read the following guide.
Published by MatFillion about 5 years ago
Windows.System.Display.DisplayRequest
API on iOS and AndroidWindows.System.Power.PowerManager
APIs on iOS and Android:
CheckBox
glyph to match UWP style on all platformsDisplayInformation
properties on iOS and Android:CurrentInputMethodLanguageTag
and TrySetInputMethodLanguageTag
on Android, iOS and WASMChatMessageManager.ShowComposeSmsMessageAsync
(and ChatMessage
Body
and Recipients
properties) on iOS and AndroidDisplayInformation
properties on iOS and Android:
Span<T>
for Grid layoutTSInteropMarshaller.InvokeJS
XamlReader
support for top level ResourceDictionary
(#640)RelativeSource.Self
bindingsTimePicker
and DatePicker
on iOS.SystemNavigationManager.BackRequested
PasswordVault
on supported platfrosmx:Load
x:Load
and x:DeferLoadStrategy
x:Load
or x:DeferLoadStrategy
Windows.Globalization.Calendar
VisualStateManager
now follows correct precedence as documented by MicrosoftFlyoutBase.AttachedFlyout
and FlyoutBase.ShowAttachedFlyout()
x:Bind
now supports binding to fieldsGrid
positions (Row
, RowSpan
, Column
& ColumnSpan
) are now behaving like UWP when the result overflows grid rows/columns definitionAppBarButton.Label
taking precedence over AppBarButton.Content
when used as PrimaryCommands
.PopupPanel
hides itself if collapsed (special cases as it's at the top of the Window
)INotifyCollectionChanged
in the Picker
null
item added at the top of the Picker
Grid
now supports ColumnDefinition.MinWidth
and MaxWidth
and RowDefinition.MinHeight
and MaxHeight
(#1032)PivotPanel
measure/arrange to allow text wrapping in pivot itemsPathIcon
supportUno.UI.Helpers.Automation.GetDependencyPropertyValue
WebAssemblyRuntime.InvokeJSUnmarshalled
method with three parameters has been removed.NavigationBarHelper
has been removed.<Button><Border>...
) will be overridden by localized values if available.SecondaryCommands
, the AppBarButton.Label
property will no longer be used for the title of menu item, instead use the AppBarButton.Content
property. For SecondaryCommands
, keep using AppBarButton.Label
.WordEllipsis
was removed from the TextWrapping
as it's not a valid value for UWP (And it was actually supported only on WASM) (The right way to get ellipsis is with the TextTrimming.WordEllipsis
)HAS_UNO
define is now not defined in uap10.0.x
target frameworks.XamlReader
fails when a property has no getterClick
and Tapped
events were not working property for ButtonBase
on Android and iOS.TextBox.IsReadOnly
from true to false no longer breaks the cursorWasmHttpHandler
was broken because of a change in the internal Mono implementation.StaticResource.ResourceKey
not_wasm
prefix properly. (#784)x:Name
entries on Style
in resourcesTextBlock
measure with constrains.SelectedValue
on a Selector
now update the selection and the indexCompleted
callback were not properly called when there's not children.LinearGradientBrush.EndPoint
now defaults to (1,1) to match UWPPublished by MatFillion over 5 years ago
ICollectionView.CopyTo
ViewBox
AutoSuggestBox.ItemsSource
Selector.SelectedValuePath
(e.g. useful for ComboBox)MediaPlaybackList
SystemChromeMediumHighColor
to use the Light themeFrameworkElement.GoToStateCore
ListView
measure/arrange for dynamic contentFrameworkElement.IsLoaded
property is now publicApplication.OnWindowCreated
AutomationProperty
PointerRelease
events are now marked as handled by the TextBox
KeyDown
events that are changing the cursor position (left/right/top/bottom/home/end) are now marked as handled by the TextBox
RoutedEventArgs.IsGenerated
returns false
as generating events with Uno is not yet supportedAutomationPeer.ListenerExists
returns false
as we cannot generating events with Uno is not yet supportedKeyUp
event properly sends KeyEventArgs
to the controlsCollectionViewSource.ItemsPath
propertyBindingExpression.UpdateSource()
MediaTransportControls
buttons now use Tapped event instead of ClickUIElement.IsPointerPressed
and IsPointerOver
internalObservableVector<T>
is now internal againTimePicker.Time
and TimePicker.MinuteIncrement
are now back for netstandard2.0
MediaPlaybackItem.Source
is back as a readonly propertyMediaPlaybackList.Items
is back to an IObservableVector
XamlReader
System.UriConverter
is being linked outListView
recycling when the XamlParent
is not available for AutoSuggestBox
Uno.UI.Toolkit
base UWP sdk to 17763ImageAsset
nodes must not be <Visible>false</Visible>
to be copied to the generated project.Path.Data
(#698)Pivot
when using native styleFeatureConfiguration.NativeListViewBase.RemoveItemAnimator
to remove the ItemAnimator that crashes when under stressComboBox
not working when using Popover
.Click
and Tapped
events were not working property for ButtonBase
on Android and iOS.LayoutProvider
exposes the Rect
s of status-bar, keyboard, navigation-bar, and an LayoutChanged
event to monitor the changes.TextBox.IsReadOnly
from true to false no longer breaks the cursorPublished by MatFillion over 5 years ago
Path.Data
property now invalidates measure and arrangeImage
logs Opened and Failed eventsupri
files for faster resolutionFeatureConfiguration.Interop.ForceJavascriptInterop
to enable JS Eval fallback in Wasm mode.ThicknessHelper
FeatureConfiguration.FrameworkElement.AndroidUseManagedLoadedUnloaded
to control the native or managed propagation performance of Loaded/Unloaded events through the visual treeMicrosoft.NETCore.UniversalWindowsPlatform
version in the UWP head template to avoid assembly loading issues when using the Uno library template in the sample solution.Path.Stretch
has been moved to Shape
and works well now for all shapes.DynamicObject
data binding, to enable support for Elmish.Uno
.CoreDispatcher
StackOverflowException
when running on low stack space environments (e.g. iOS)ResourceLoader.GetForViewIndependentUse(string)
and named resource filesFeatureConfiguration.FrameworkElement.WasmUseManagedLoadedUnloaded = false
.x:FieldModifier
FeatureConfiguration.DataTemplateSelector.UseLegacyTemplateSelectorOverload = true
.ResourcesGeneration
msbuild target has been renamed to UnoResourcesGeneration
Frame
does not unset Page.Frame
when a page is removed{}
in their value (#455)VisibleBoundsPadding
memory leakCommandBar
x:Name
in XAML documentsAutomationProperties.Name
ListViewBase.SelectedItems
is updated on selection change in Single selection modeListView
group headers messed up on item updateSelector.SelectionChanged
is raised twice on updated selectionFrameworkElement.WillMoveToSuperview
log to Application.Current.UnhandledException
Published by jeromelaban almost 6 years ago
This release is contains a preview of the WebAssembly projects and C# debugger.
See this article for more details on this release.
Published by agneszitte almost 6 years ago
This new release includes the following major features :
And other features:
This new release also addresses the following issues :
As a breaking change, the collapsible button bar is now taken into account by visible bounds calculation.
Apps which use VisibleBoundsPadding or have command bars will therefore see an adjustment to the height of their windows on Android.
View the full change log.