.NET  

Build Cross-Platform Windows Forms Applications with Gtk.Windows.Forms

What if you could run your existing Windows Forms applications on Linux and macOS without rewriting your UI?

Traditionally, Windows Forms applications are tightly coupled to Windows. Porting them to other platforms often means rebuilding the UI using a completely different framework. This is time-consuming, error-prone, and expensive.

Gtk.Windows.Forms offers a different approach. It allows developers to reuse their existing WinForms knowledge and codebase while targeting multiple operating systems.

What Is Gtk.Windows.Forms?

Gtk.Windows.Forms is a cross-platform framework that enables Windows Forms applications to run on:

  • Windows

  • Linux

  • macOS

It works by implementing the Windows Forms API on top of GTK via GtkSharp, allowing developers to:

  • Use Visual Studio and the Windows Forms Designer.

  • Keep familiar APIs (controls, events, and properties).

  • Compile once and run across multiple platforms.

Key Benefits

1. Reduced Development Time

Write your UI once and reuse it across platforms.

2. Lower Maintenance Costs

Fix bugs and ship updates from a single codebase.

3. Familiar Development Model

There is no need to learn a new UI framework. You can continue using familiar Windows Forms patterns.

4. Cross-Platform Reach

Deploy your application to Windows, Linux, and macOS users.

Quick Demo: Creating a Cross-Platform WinForms Application

Step 1: Install the .NET SDK

Verify that the .NET SDK is installed:

dotnet --version

If needed, download it from:

https://dotnet.microsoft.com/en-us/download

Step 2: Create a Windows Forms Project

dotnet new winforms -n MyWinFormsApp
cd MyWinFormsApp

Step 3: Open the Project in Visual Studio

devenv MyWinFormsApp.csproj

Step 4: Add Gtk.Windows.Forms

Edit your project file (.csproj) and add the following package reference:

<ItemGroup>
  <PackageReference Include="Gtk.Windows.Forms" Version="1.3.24.26204" />
</ItemGroup>

Step 5: Make the Project Cross-Platform

Modify the target framework:

<TargetFramework>net10.0</TargetFramework>

Remove the following property:

<UseWindowsForms>true</UseWindowsForms>

Step 6: Restore Packages

dotnet restore

Step 7: Run the Application

dotnet run

Your Windows Forms application can now run across multiple platforms.

How It Works (Simplified)

Gtk.Windows.Forms acts as a compatibility layer.

It provides the following functionality:

  • Windows Forms controls are mapped to GTK widgets.

  • Events are translated from GTK signals into Windows Forms delegates.

  • Layout behavior mimics the Windows Forms layout system.

  • Rendering is performed using GTK drawing APIs.

Examples

  • RichTextBox → Backed by Gtk.TextView

  • Layout containers → Mapped to GTK containers

This allows existing applications to run with minimal code changes.

When Should You Use It?

Gtk.Windows.Forms is a good choice if:

  • You have an existing Windows Forms application that you want to port.

  • You need cross-platform support without rewriting the UI.

  • You prefer the Windows Forms development model.

Limitations

Keep the following considerations in mind:

  • Not all controls are fully implemented.

  • Some platform-specific behaviors may differ.

  • Performance depends on GTK integration.

Project Background

The project originated from EasyWebFactory and was later forked and extended.

Enhancements include:

  • Translation from Chinese to English.

  • Multi-language support (EN, FR, DE, IT, ES, and CN).

  • Code refactoring and cleanup.

  • Introduction of unit testing for improved stability.

Conclusion

Gtk.Windows.Forms provides a practical solution for bringing Windows Forms applications to modern, cross-platform environments.

Instead of rewriting your UI, you can:

  • Reuse your existing code.

  • Keep your existing development workflow.

  • Expand your application's reach to Windows, Linux, and macOS.

As the project continues to evolve, it improves in stability, feature coverage, and usability, making it a compelling option for developers looking to modernize legacy Windows Forms applications.

Summary

Gtk.Windows.Forms enables developers to run existing Windows Forms applications on Windows, Linux, and macOS by implementing the Windows Forms API on top of GTK. By preserving the familiar WinForms programming model and requiring only minimal project changes, it offers a practical path for extending legacy desktop applications to multiple platforms without rebuilding the user interface from scratch.