Introducing
October 4, 2022
OpenSilver 1.1 is out !
Today we are thrilled to announce the release of OpenSilver 1.1, a major improvement over last year’s 1.0 release. The update brings it a large step closer to full parity with Microsoft Silverlight.
OpenSilver, the plugin-free, open-source reimplementation of Silverlight, just received several key upgrades:
- Over 100+ new Silverlight features (see below)
- Support for additional third-party libraries, including Telerik UI
- 3x improvement in performance over v1.0
- What’s next: VB.NET support coming soon
Over 100+ New Silverlight Features
Moving code from Silverlight to OpenSilver is made easier with support for over 100 additional Silverlight APIs. Developers can now reuse more than 99% of their Silverlight application’s code. New features include:
- New DataGrid: based on the original code from Microsoft, the new DataGrid is feature-packed and offers pixel-perfect backward compatibility
- Silverlight Toolkit: most controls are now supported in OpenSilver, including: DataForm, Accordion, AutoCompleteBox, DataPager, LineSeries…
- Improved layout system: OpenSilver now supports the “Measure” and “Arrange” Silverlight APIs for creating custom panels and layouts
“Applications migrated from Silverlight now render almost identically, at pixel-perfect level” says Giovanni Albani, CEO of Userware, the company behind OpenSilver. “Some clients have even asked us to make changes to their code on purpose, just to distinguish the migrated version from the original one.”
Support for Additional Third-Party Libraries, including Telerik UI
Last year’s 1.0 release of OpenSilver already supported most of the popular Silverlight libraries, including RIA Services, PRISM, MEF, Unity, OData, MVVM Light, and Newtonsoft.
The new 1.1 release adds support for even more libraries, including:
- SignalR
- Caliburn.Micro
- PostSharp
- Blacklight Controls
- Google Protobuf
- Reactive Extensions
- MS Expression Interaction/Behaviors
- Microsoft Enterprise Library
Support for the Telerik UI suite of controls has also been improved. Thanks to better support for low-level Silverlight APIs, the full source code of “Telerik UI for Silverlight” can now be compiled and run with OpenSilver.
Most Telerik UI components now work flawlessly, including:
- RadGridView
- RadRibbon
- RadScheduleView
- RadTreeListView
- RadChart
- and dozens of other controls
Performance Improvements
New features like Virtualization, .NET 7 support, and several major optimizations have led to a significant improvement of overall performance.
“On average, we improved performance by up to 3 times” says Albani. “We’ve observed this while porting Silverlight business apps to OpenSilver for our clients. Some portions of their applications now run even faster in OpenSilver than in their original Silverlight version.”
VB.NET Support Coming Next
With this release, Userware has been working on laying the groundwork for an upcoming innovation: supporting VB.NET in the browser.
“This will make OpenSilver the only technology out there that supports VB.NET and XAML to build web apps”, says Albani. “It will throw a lifeline to the huge number of Visual Basic developers that are out there, and that are sad to see their favorite programming language being progressively abandoned. As we are flooded with requests for assistance to migrate VB.NET Silverlight applications, we believe that this feature will find a lot of interest in the Microsoft developer community.”
VB.NET support is expected to come in OpenSilver 2.0, planned to be released early 2023.
About OpenSilver
OpenSilver is a modern, plugin-free, open-source reimplementation of Silverlight, capable of running large, complex legacy applications, as well as newly written C# and XAML applications.
It provides a 3 to 5 times faster alternative to rewriting Silverlight applications, letting developers leverage their .NET skills and focus on new improvements instead. Over 99% of Silverlight code can be ported to OpenSilver without any code changes. Migrated applications preserve the look and functionality of the original ones, and can run securely on all browsers without requiring a plugin.
The project is hosted publicly on GitHub, and is actively developed by a large team of full-time developers, funded by Userware – which provides support and migration services -, and corporations of all sizes investing in the technology to maintain their line-of-business applications. The development of OpenSilver was motivated by the team’s strong belief that developers should not be compelled to rewrite existing applications because of a change in the underlying stack.
OpenSilver applications run on every modern browser, across all platforms, including iOS, Android, Windows, MacOS, and Linux.
OpenSilver 1.1 is available for download at: https://www.opensilver.net
Source code: https://github.com/OpenSilver/OpenSilver
About Userware
Userware is a software company founded in 2007 by two experts in Microsoft technologies. It is based in Paris, France, and has a portfolio of products with more than 25,000 customers in over 75 countries. Specialized in Microsoft technologies and developer tools, the company started the OpenSilver project in 2014 and has been constantly improving it for over 8 years with a dedicated team of developers and an active community of contributors.
Our Vision:
“We are .NET developers who believe that Silverlight was the best platform ever for developing line-of-business (LOB) applications. We are sad to see Silverlight die due to the lack of support for plug-ins in modern browsers, so we want to reimplement it using modern, open, and standards-based technologies. We want to make it even more powerful than before, for developers to have the tools to build amazing products that can change the world.”
Acknowledgements:
OpenSilver wouldn’t be possible without the amazing work by the incredibly talented people in the Mono for WebAssembly and Blazor teams at Microsoft.
Contact:
Please click here to contact us.
Press Room:
Please visit the Press Room for material including the Press Release, the logo, and more.
Changelog since OpenSilver 1.0
New Xaml features:
- Core features:
- Animation:
- PointAnimation (partially) implemented
- ColorAnimationUsingKeyFrames
- Animations targets can now be DependencyObjects instead of FrameworkElements
- Bindings:
- Add support for ElementName and Relative Mode = TemplatedParent binding created in C# (previously could only be used in a xaml file)
- ICollectionView and CollectionViewSource are now properly supported in bindings
- Path representing an attached property are now supported (in xaml only)
- Add support for UpdateSourceTrigger.LostFocus
- Triggers:
- FrameworkElement Triggers (including EventTrigger, TriggerAction, BeginStoryboard)
- Virtualization:
- Add support for virtualized panels (VirtualizingPanel, VirtualizingStackPanel)
- Add Support for initialization parameters:
- StartupEventArgs.InitParams
- Host.InitParams
- ApplicationServiceContext.InitParams
- Validation:
- Add support for Validation states
- Validation error Popup is not shown automatically, each control has the responsibility to display it
- Components:
- ProgressBar
- Polyline
- PrintDocument
- OpenFileDialog
- InkPresenter
- StylusDevice
- XmlLanguage
- BrowserInformation
- ImageBrush
- CompositionHost and CompositionInitializer
- Features:
- Implement TransformGroup.Value property
- Implement mouse wheel scrolling on templated ScrollViewers
- Implement debouncing on Scrollbars
- Implement TextInput event
- Implement ToolTip’s Placement and PlacementTarget properties
- Handles ToolTip’s Open and Closed visual states
- Support retrieving Guids from Interop calls
- Implement Settings.Windowless property
- Implement Application.LoadComponent method
- Animation:
- Blend SDK:
- Port the System.Windows.Interactivity assembly based on the official XamlBehaviors for WPF repo : https://github.com/microsoft/XamlBehaviorsWpf/
- Port the Microsoft.Expressions.Interactions assembly (based on the XamlBehaviors for WPF repo too)
- Silverlight Toolkit:
- Port the System.Windows.Controls.Layout.Toolkit assembly from https://github.com/microsoftarchive/SilverlightToolkit/tree/master/Release/Silverlight5/Source/Controls.Layout.Toolkit
- Includes: LayoutTransformer, Accordion, TransitioningContentControl
- Port the System.Windows.Controls.Data assembly from https://github.com/microsoftarchive/SilverlightToolkit/tree/master/Release/Silverlight4/Source/System.Windows.Controls.Data
- Includes: DataGrid, DataPager
- Port the System.Windows.Controls.Input assembly from https://github.com/microsoftarchive/SilverlightToolkit/tree/master/Release/Silverlight4/Source/Controls.Input
- Includes: AutoCompleteBox
- Port the System.Windows.Controls.Navigation assembly from https://github.com/microsoftarchive/SilverlightToolkit/tree/master/Release/Silverlight4/Source/System.Windows.Controls.Navigation
- Includes: Frame, Page, NavigationService
- Partially port the System.Windows.Controls.DataVisualization.Toolkit assembly from https://github.com/microsoftarchive/SilverlightToolkit/tree/master/Release/Silverlight5/Source/Controls.DataVisualization.Toolkit
- Port several other components from the toolkit (CalendarDayButton, DragDecorator, TreeViewItemCheckBox…)
- Port the System.Windows.Controls.Layout.Toolkit assembly from https://github.com/microsoftarchive/SilverlightToolkit/tree/master/Release/Silverlight5/Source/Controls.Layout.Toolkit
Improved Xaml features:
- Bindings
- OneTime bindings are updated on DataContext changes
- Custom Layout:
- Multiple improvements and bug fixes
- Routed Events
- Improve calculation of the event route
- Improve reliability of marking an event as handled
- Clipboard
- Refactor Clipboard to use the Clipboard API when applicable
- Inheritance context improvements:
- Inherited context propagates to FrameworkElements inside a ResourceDictionary
- Inherited context propagates inside VisualStateGroups and Storyboards
- Remove DependencyObject constraint on DependencyObjectCollection generic parameter
- ActualWidth/ActualHeight dependency properties are now updated when the size changes
- Static resources lookup algorithm has been improved to match Silverlight’s behavior
- Multiple TextBox improvements:
- KeyDown event handling improved
- TextInput event handling improved
- Updating the text property during the TextChanged event now properly impacts the displayed text
- Typing is now allowed even if MaxLength is reached if there is an active selection
- TextWrapping property’s default value is now NoWrap
- Multiple ComboBox improvements:
- Displayed item match closer Silverlight’s behavior
- ComboBox presenter’s is not hit testable
- Improve disabled state
- Mutliple DatePicker improvements:
- Selected date is now displayed in the requested format
- Check for values that are not a valid date
- Disabled visual state has been added
- NotImplementedAttribute can now be declared on an Assembly
- Implement XAML namescopes: improves FrameworkElement.FindName, Control.GetTemplateChild
- Include build information into assemblies
- Allow providing a set of known types when initiating a request needed to serialize the request
Reworks:
- Rewrite ItemContainerGenerator based on the WPF implementation
- Rewrite ToolTipService and ToolTip based on the Silverlight behavior
- Rewrite VisualTreeHelper based on the WPF implementation
- Rewrite NumericUpDown based on the Silverlight toolkit original code: https://github.com/microsoftarchive/SilverlightToolkit/blob/master/Release/Silverlight5/Source/Controls.Input.Toolkit/NumericUpDown/NumericUpDown.cs
- Rewrite Selector based on the WPF implementation
- Rewrite PasswordBox to use a proper template
BugFixes:
- Runtime:
- Fix several cases where objects were not converted to a JavaScript string in invariant culture
- The UIElement.IsVisible property is now false and its backing dependency property is private as the property is meant to be read only
- Start index of collection changed notification raised by DependencyObjectCollection.Add has been adjusted
- Previously selected items in ComboBoxes are no longer incorrectly highlighted
- VisualTreeHelper.FindElementsInHostCoordinates(Point, UIElement) now returns a list of the elements that pass the hit test instead of only the top-most element
- Turn Border.Child into a dependency property (to enable bindings)
- Interop Implementation is now thread safe in the simulator
- TextBox.Select(int, int) method no longer causes NullReferenceExceptions
- Fix HyperlinkButton internal navigation behavior
- Rectangles with rounded corners now render properly
- Custom markup extensions are now supported on attached properties
- Mouse Capture is now released after receiving a “mouse up” event
- UIElement.TransformToVisual now returns a MatrixTransform
- ButtonBase.CanExecute is now refreshed when CommandParameter changes
- Fix an issue where Popup would be opened in the background
- Fix an issue where setting the HorizontalAlignment would render an otherwise collapsed element
- Rect Constructors have been fixed
- Preserve the user state object provided for asynchronous calls
- Compiler:
- Prefix generated fields name with ‘@’ to prevent collisions with reserved names (for example x:Name=”this”)
- Reduce the size of the methods generated by the compiler. This reduces considerably the chance to pass to the mono interpreter a method that exceed the maximum size it can handle.
- Add support for legacy Silverlight 1.0 xaml namespace
- Generate separate files during pass1 and pass2 of the xaml preprocessor
- Subclasses of ResourceDictionary defined by Source are now supported in XAML
- ServiceReferenceFixer now supports DuplexClientBase and “out” parameters
Performance:
- Use Resize Observer API instead of ResizeSensor for size change notifications
- Listen to “touch” events only when the device supports it.
- Reduce the amount of divs rendered under CustomLayout
- Refactor OpenSilver.Profiler class to not rely on Interop calls to measure time.
- Optimize some default template (ex: HyperlinkButton)
- Minimize the number of context switches between C# and Javascript due to routed events
Simulator:
- It is now possible to scroll in the properties panel.
- Enabled inspection of read-only properties
- Added a button to refresh all read-only properties at once
- Added support for HtmlWindow.Alert and HtmlWindow.Confirm
- Added the possibility to save a html snapshot from a breakpoint
- Added a “AppStartedCallback” parameter to SimulatorLaunchParameters that will be called when the app is started
- Implemented Dispatcher.CheckAccess()
- Added option to set the InitParams in SimulatorLaunchParameters.
- Prevented the Simulator from showing the “0 errors” red block during rendering
VSIX:
- Now allows to pick between targeting .Net 6 or 7 preview
- Application templates now include a nuget.config file which directs to OpenSilver’s MyGet feed, for easy access to the latest builds
- The default Startup project is now the .Browser one.
Others:
- Support for .woff2 resources
- Xml Documentation files are now included in NuGet packages
- Added a check during build on whether msbuild is using an old compiler, in which case a custom error message will be shown to help you fix it.