Awesome
WinForms2AvaloniaConverter
WinForms2AvaloniaConverter helps you migrate a Windows Forms project to an Avalonia UI project. It can convert entire projects or individual files.
The converter migrates WinForms UI controls to Eremex Avalonia UI and standard Avalonia UI counterparts. You can customize the converter to change control mapping.
The converter provides the following project migration features:
- Uses specified control mapping rules to convert WinForms controls to Eremex Avalonia UI and standard Avalonia UI controls.
- Separates definition of source Form and UserControl classes into View and View Model classes according to the MVVM design pattern. Creates corresponding files in the destination project/folder.
- Creates observable properties and commands in View Models (using the CommunityToolkit.Mvvm library), and binds generated Avalonia UI controls to them.
- Copies resources from the source project to the destination project/folder.
- Extracts images from resource files in the source project, and saves them to the destination project/folder.
The converter does not transfer business logic from code-behind, nor does it transfer code from additional *.cs files in the source project. You need to copy this code manually to the Avalonia project.
Online Video
- WinForms2AvaloniaConverter (Russian)
Convert Projects or Individual Files
For small projects that consist of a few forms, you can use the converter to migrate the entire project. Small projects are easier to check after conversion.
Conversion of individual files is handy for large projects that consist of a multitude of forms. You can iteratively convert forms one by one: port a specific form(s), move the converted files to the target Avalonia UI project, check the result of conversion, and then continue converting other forms.
Conversion of individual files is also useful for testing the converter.
Get Started with Project Conversion
- Download and then open the WinForms2AvaloniaConverter project in Visual Studio.
- Customize control mapping rules for Windows Forms controls used in your source project, as described in Converting UI and Creating View Models.
- Specify the target Avalonia UI framework version using the
XamlConverter.avaloniaVersion
property. - Specify the target version of the Eremex Avalonia UI controls using the
XamlConverter.controlsVersion
property. - Build the WinForms2AvaloniaConverter library, or create a NuGet package for the WinForms2AvaloniaConverter library.
- Include the created library/NuGet package into your WinForms project that needs to be converted. Alternatively, you can include the source files of the WinForms2AvaloniaConverter library into your WinForms project.
- In your source project, inherit all
System.Windows.Forms.Form
objects from theWAConverter.WAForm
class, and inherit allSystem.Windows.Forms.UserControl
objects from theWAConverter.WAUserControl
class. - Run the project.
- Open all forms one by one at runtime, so the converter can analyze them. The converter recursively iterates through the Controls collection of each opened Form, and collects information about the names, position, size of the controls and their properties. After data is collected, it generates Avalonia UI files in the destination folder (see
./Bin/../Converted
). - Copy code that was skipped during conversion to the destination project.
- Test the project.
Converting UI and Creating View Models
Views
For source WinForms Form and UserControl classes, the converter generates View classes in the *.axaml and *.axaml.cs files. The names of the source forms and user controls determine the names of generated View classes and files.
WinForms controls nested in source forms and user controls are converted to Eremex Avalonia UI and standard Avalonia UI counterparts by default. You can modify the XamlConverter
class to adapt the conversion rules to your WinForms project.
Related API
XamlConverter.typesMapping
dictionary (initialized in theXamlConverter.InitTypeMapping
method) — Use this member to customize control mapping rules according to your requirements.XamlConverter.ignoredControls
property — Specifies a list of controls ignored during the conversion. For instance, this list contains theHScrollBar
andVScrollBar
controls, by default.XamlConverter.ConvertControlCore
— Implements generation of XAML attributes for Avalonia UI controls.
Avalonia UI does not support control positioning using absolute coordinates.
During conversion, the System.Windows.Forms.TableLayoutPanel
container is converted to the Avalonia.Controls.Grid
container. Controls positioned within TableLayoutPanel
cells are placed within corresponding Grid
cells. All other controls are combined in the StackPanel
container.
View Models
Beside Views, the converter creates View Models in *.cs files for Forms and UserControls. The View Models define commands (RelayCommand
) for clickable controls (buttons), and observable properties that should provide data for specific controls.
UI controls in View classes contain bindings to the commands and observable properties defined in View Models.
Related API
XamlConverter.GenerateFields
— Creates observable properties for specific Avalonia UI controls.XamlConverter.GenerateMethods
— Generates commands in View Models.XamlConverter.IsCommandControl
— Specifies controls for which commands are generated.
Processing and Copying Resources
The converter searches for resources (*.resx files) and localization resources (*.<Localized>.resx files) in the source project's directory, and then copies found files to the destination folder.
When copying resource files, a cleanup function keeps only specific data properties (Text
and Caption
), and skips irrelevant properties (Name
, Parent
, ZOrder
, and Type
).
In WinForms, images are typically stored within .resx files in binary format. The converter extracts these images from .resx files and saves them as standalone image files in the destination folder.
Related API
XamlConverter.AddResXFiles
— Copies *.resx files to the destination folder.ResXCleaner.CleanupFile
— Extracts images from a *.resx file in the destination folder and saves them as standalone image files. Removes irrelevant properties from the *.resx file.ResXCleaner.ignoredProperties
— Specifies a list of irrelevant properties removed by a cleanup function from *.resx files in the destination folder.
Customize Avalonia UI Project Template
The AppTemplate
folder of the WinForms2AvaloniaConverter project contains files that define the template used to generate an Avalonia UI project. The template's files are stored as Embedded Resources. You can modify the template to suit your requirements.
Related API
XamlConverter.CreateAppFromTemplate
— Generates an Avalonia UI project from the project template.