OpenSilver 2.0 Full Change Log
This page contains the list of the main improvements in OpenSilver 2.0 (October 2023), since the version 1.1 that was released in October 2022. For an even more detailed changelog, head over to the History of the ‘develop’ branch on GitHub.
Highlights
- VB.NET Support lets you use Visual Basic paired with XAML to build web applications. The Visual Studio extension (VSIX) adds new project templates for creating OpenSilver apps using VB.NET.
- Live XAML Preview: see the result of your XAML code without launching the app, directly from the Visual Studio editor. You can even interact with the preview and partially use the application from within the XAML editor in Visual Studio.
- Business Application project template: the Visual Studio extension (VSIX) now includes a project template for quickly create client/server line-of-business applications powered by RIA Services. This is the same template that was included in “WCF RIA Services” in the old Silverlight days, modernized to now use the open-source “Open RIA Services” technology.
- Sample CRM app on GitHub: A real-world application created using the Business Application template and RIA Services, which can be used as a starting point for your projects. It can be found here.
- New layout engine that behaves like Silverlight and other XAML-based technologies. Create custom panels by overriding the Measure and Arrange methods. Third-party controls like Telerik UI for Silverlight can now be recompiled with OpenSilver.
- Up to 10X faster Simulator, now based on WebView2.
Other improvements
- Shapes are now rendered via SVG for a crisper result and higher performance
- Let users enter rich text via the new RichTextBox control
- Support both left-to-right (e.g. English) and right-to-left (e.g. Arabic) languages via the FlowDirection property
- Mix and match XAML and HTML by using the improved XAML-based HtmlPresenter control, that is now able to resize itself based on its HTML content.
- Initial support for the XamlReader (most features are supported except templates)
- Catch application-wide unhandled exceptions by registering the “Application.UnhandledException” event
- Specify multiple root elements in your HTML page by creating multiple instances of the Window class (this is useful when integrating in Angular, React, Blazor, or other frameworks, to have multiple XAML visual trees on the same HTML page).
- Easily support signatures with the InkPresenter control
- Improve your text with the CharacterSpacing property
- Fill controls using images with the improved ImageBrush
- Add effects to UIElements
- Use the BlurEffect to blur elements in your XAML
- Manipulate pixels programmatically via the WriteableBitmap class
- Inspect the properties of C# objects from the browser console
- Easily interact with JavaScript from C# via the “ScriptObject” class (ScriptObjectCollection, GetProperty, SetProperty, Invoke, InvokeSelf, ManagedObject…)
- Easily call C# from JavaScript and create JavaScript callbacks with the new “Interop.CreateJavaScriptCallback” method
- Easily interact with the DOM via the HtmlDocument and HtmlElement classes
- Leverage more printing functionality with the improved PrintDocument class
- Declare your own custom markup extensions with an explicit interface implementation
- Optimize multiple property assignments with ISupportInitialize
- No more constraints on the file extension for resources and embedded resources
- LinearGradientBrush gets updated when the size of a control changes
- Use String interpolation handlers
- Revamped Focus management and handling
- Revamped ButtonBase and improved Button control
- Improved support for animations, including applying final animation values on elements that have not been rendered, and support for escaping strings for animations
- Improved lookup for XAML “implicit styles” (now uses logical parents)
- Restrict of disable implicit style lookup via the “FrameworkElement.ResourceLookupMode” and/or “Settings.DefaultResourceLookupMode” properties
- Leverage drag and drop in classes that inherit from Panel
- Display floating windows with the revamped ChildWindow
- Leverage the advanced features of the revamped DatePicker and Calendar controls
- Improved support for touch screens and touch events
- Improved support for key events (KeyUp, KeyEventArgs.Cancellable…)
- Get better accuracy when finding the coordinates of UI elements with the revamped “FindElementsInHostCoordinates” method
- Declare readonly Dependency Properties
- Add validation callbacks to your Dependency Properties
- Pass default value factories to your Dependency Properties
- Override dependency properties in derived types via the “OverrideMetadata” and use the “AddOwner” method if needed
- Leverage improved Binding features, including:
- Binding validation errors reporting
- Support for IDataErrorInfo data sources
- Indexer nodes (in the Path of a binding) now listen to the PropertyChanged event
- Allow null value during Binding updates when applicable
- Improved TextBlock control:
- Support for “word break“
- New “BaseLineOffset” property
- Choose the character to display when the text is truncated by setting the “ellipsis character” on single-line TextBlock
- Improved TextBox control:
- Choose the spell checker availability via the new “IsSpellCheckEnabled” property
- Support for “word break“
- New “BaseLineOffset” property
- New OnKeyDown event and improved event handling (TextInput)
- Improved scroll and keyboard navigation
- Improved PasswordBox control:
- Foreground is now inherited
- More Visual States are available
- Improved Scroll and Keyboard navigation
- Improved ComboBox control:
- Support for TextSearch
- Improved Focus and Validation Visual states
- Improved default template
- Improved keyboard navigation
- Set the ScrollBars visibility through the ScrollViewer’s attached properties
- Selected item now gets focus when opening the drop down
- ComboBox now receives focus after closing the DropDown
- Improved ScrollViewer control:
- New default style, identical to that of Silverlight
- Fully customize the template and the look of the scroll bars
- Support additional properties such as ScrollableWidth/Height, ViewportWidth/Height, and ExtentWidth/Height
- Support OnKeyDown
- Improved Popup control:
- Position the popup where you like with full support for all the Placement modes
- Miscellaneous popup improvements
- Improved ListBox control (support for TextSearch, support for the “SelectedUnfocused” Visual State, improved keyboard navigation…)
- Improved ContextMenu control
- Improved ScrollBar control
- Leverage all the properties of the Hyperlink control
- Use the “Bounds” property of the Geometry class
- Improved Polyline control
- Improved ArcSegment control
- Improved Toggle Button control
- Improved TreeView control
- Improved Timepicker control
- Improved Grid panel
- Leverage additional features of the ToolTip class
- The default template of the BusyIndicator now has a ProgressBar
- Use “ref” parameters in Web Service references and support for “ByRef” types during serialization of SOAP request parameters
- Use “MessageContractAttribute” when reading the response of a WCF SOAP call
- Support Enum responses in WCF calls
- Use the “Length” property of “MemoryFileInfo“
- SOAP response parsing now supports xml 1.0 characters
- Miscellaneous XAML improvements:
- Several improvements to the layout system and the measure/arrange mechanism
- Several alignment improvements
- Text selection is now disabled on Drag & Drop targets
- Color is now implicitly converted into SolidColorBrush in Setters when appropriate
- DependencyObject.ClearValue can now clear the value of read only dependency properties
- More controls are now available from the default namespace in XAML
- Two-way Bindings now update their source only once, as expected
- Fixed several issues related to mouse capture
- The AllowDrop property is now inherited
- Miscellaneous improvements:
- Improved handling of parameters types during SOAP requests
- The case of empty function names for the typescript generator is now properly handled
- Generic types for attached properties are now properly handled
- Better handling of generic types during compilation
- DispatcherTimer no longer fires ticks after being disabled
- Progressive loading no longer causes IndexOutOfRangeExceptions
- Fixed NullReferenceException in weak event listeners
- Rect.Union(…) supports empty rectangles
- More…
Performance improvements
Note: best performance is obtained when the app is published in AOT (Ahead Of Time) mode.
- Overall layout system performance improvements
- Optimized javascript interop calls in OpenSilver
- Several javascript-related improvements
- Option to enable progressive loading of rows in the DataGrid
- Prevented duplicated resource lookup in several places
- Reduced string allocations
- Cache default styles resources
- Cache implicit styles
- Cache implicit DataTemplates
- Cache frequently-used strings
- Use Borders instead of Shapes in default styles where applicable
- Only subscribe to touch events on devices with touch support
- Mouse events now use fewer event listeners
- More…
Memory improvements
- Switched to weak references and weak event listeners in several places
- Release javascript callbacks in several places
- Fixed effects maintaining their owner alive
- Fixed a memory leak when using Dispatcher.BeginInvoke
- Fixed memory leaks of javascript event arguments
- Fixed several memory leaks related to JavaScript interops
- Fixed several memory leaks related to INotifyPropertyChanged
- Fixed memory leaks on Bindings with indexer nodes
- Fixed memory leak on dependency property listeners
- Fixed a memory leak in the WebBrowser (WebView) control
- Fixed memory leaks in Brush
- Fixed memory leaks caused by animations
- Fixed memory leak in Radiobutton
- Fixed memory leak in ButtonBase with non-null Command
- Fixed memory leak in Clipboard
- Fixed multiple event-related memory leaks in DataGrid
To learn more about OpenSilver 2.0, read the announcement or watch the video.