Eto.Forms spike: Convert PortableCreatorDialog and SelectCommandDialog
Proof of concept converting two WinForms dialogs to Eto.Forms to evaluate cross-platform UI modernization.
Implementation
New Projects
-
Central.Eto- Library with Eto.Forms dialog implementations -
Central.Eto.Demo- Demo application showcasing converted dialogs
Converted Dialogs
-
PortableCreatorDialog- Portable installation creator -
SelectCommandDialog- Command selection interface (simplified)
Key Patterns
- Manual UI construction using
TableLayoutandStackLayout - Resx localization via
ResourceManager(17 languages preserved) - Event handlers map directly from WinForms equivalents
// Eto.Forms layout approach
Content = new TableLayout
{
Spacing = new Size(5, 10),
Rows =
{
new TableRow(labelInfo),
new TableRow(targetLayout),
new TableRow { ScaleHeight = true }
}
};
Findings
Viable for cross-platform UI - Resx localization works unchanged, layout system is more flexible than WinForms anchoring, but requires manual UI construction.
Trade-offs - ~2x LOC per dialog (no designer code separation), steeper learning curve, but cleaner diffs and explicit layout logic.
See ETO_FORMS_SPIKE.md for detailed analysis and src/Central.Eto/README.md for technical comparison.
[!WARNING]
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
ci.appveyor.com
- Triggering command:
/usr/bin/dotnet dotnet restore(dns block)- Triggering command:
/usr/bin/dotnet dotnet build(dns block)- Triggering command:
/usr/bin/dotnet dotnet build Central.Eto.Demo/Central.Eto.Demo.csproj --no-restore(dns block)t1.symcb.com
- Triggering command:
/usr/bin/dotnet dotnet build(dns block)t2.symcb.com
- Triggering command:
/usr/bin/dotnet dotnet build(dns block)tl.symcb.com
- Triggering command:
/usr/bin/dotnet dotnet build(dns block)tl.symcd.com
- Triggering command:
/usr/bin/dotnet dotnet build(dns block)If you need me to access, download, or install something from one of these locations, you can either:
- Configure Actions setup steps to set up my environment, which run before the firewall is enabled
- Add the appropriate URLs or hosts to the custom allowlist in this repository's Copilot coding agent settings (admins only)
Original prompt
This section details on the original issue you should resolve
<issue_title>Eto.Forms spike</issue_title> <issue_description>Pick one or two simple Forms in the project and convert them from WinForms to Eto.Forms as a proof of concept. Make sure to retain resx-based localization.</issue_description>
Comments on the Issue (you are @copilot in this section)
- Fixes 0install/0install-win#236
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.