Repository navigation
ModernFormsNext 1.10.0
ModernFormsNext 1.10.0 release notes
ModernFormsNext 1.10.0 is a coordinated framework, Designer, template, Visual Studio extension,
packaging, and documentation release. It adds a reusable vector-geometry subsystem, closes the
remaining layout-animation gaps, makes designed UserControls a first-class workflow, and brings the
experimental Android animation runtime onto the platform frame clock. Windows remains the primary
and most mature runtime. Android remains experimental.
The release is prepared for tag v1.10.0. The tag-triggered workflow builds packages and versioned
offline documentation from the exact tagged commit, validates every artifact, and only then creates
the GitHub Release and publishes NuGet packages.
Highlights
Shapeand reusableGeometryAPIs provide retained vector content through the same SkiaSharp
rendering path used by the rest of the framework.Ellipse,Circle,Line,Polygon,Polyline, andPathcontrols cover common vector UI,
with fill, stroke, transforms, clipping, hit testing, and Designer round trips.- Animated layout and layout-aware visual-state metrics integrate with the existing shared
scheduler instead of introducing a separate layout timer. - Brush interpolation supports compatible solid and gradient values during themes, visual states,
and property animations. - The Designer can configure layout transitions, visual-state transitions, and ordered
InteractionEffects, includingRippleEffectandPressScaleEffect, without running arbitrary
project code. - Form and UserControl roots share one design pipeline. Project-local custom UserControls receive a
safe, data-only preview and stay atomic when composed in another design surface. - Android animation frames use
Choreographer, lifecycle-aware elapsed time, and live platform
animation-scale observation while Android support remains explicitly experimental. - GitHub releases can now attach versioned source docs, offline HTML, selected samples, and an
aggregate SDK/reference bundle tied to the exact release tag and commit.
Shapes and reusable vector geometry
Shape is an abstract framework control for vector content. The built-in controls are:
EllipseandCirclefor oval and circular geometry;Linefor a single stroked segment;PolygonandPolylinefor reusable point collections;Pathfor multi-figure vector content.
Shapes use the existing observable Brush hierarchy for Fill and Stroke. Stroke caps, joins,
miter limits, logical-pixel thickness, transforms, clipping, invalidation, and geometry-aware hit
testing are supported without native WinForms controls.
The reusable geometry model includes line, rectangle, ellipse, and path geometry; path figures;
line, quadratic Bezier, and cubic Bezier segments; fill rules; and observable point/segment/figure
collections. One geometry can be shared by multiple consumers, and mutations invalidate subscribed
controls through the framework's existing rendering path.
The Designer toolbox includes the built-in shapes. Structured editors cover point collections and
path geometry, while deterministic serialization, generated C#, and conservative reverse parsing
preserve the code-first workflow. The same Skia conversion is used by Windows and the experimental
Android backend.
Animation and interaction effects
The shared AnimationScheduler now also drives layout-affecting transitions. LayoutTransition
interpolates supported layout values, retargets from the current presentation value, respects
reduced-motion policy, and coalesces layout and repaint work with normal framework scheduling.
Immediate layout remains the default unless a transition is explicitly enabled.
Layout-aware visual-state metrics can interpolate supported values instead of switching every
layout-related metric discretely. Compatible solid and gradient Brushes can also interpolate across
property animations, theme transitions, and visual-state transitions. Incompatible brush kinds or
gradient structures still switch deterministically rather than producing an invalid intermediate
value.
InteractionEffects remain target-local and opt-in. The built-in RippleEffect and
PressScaleEffect continue to use normal input, capture, cancellation, and shared scheduling; they
do not create a second input or animation pipeline. The Designer now exposes ordered editors for
these effects plus layout and visual-state transition values. Project-defined animation
descriptions can opt in through safe metadata and source parsing without activating arbitrary CLR
objects in the design host.
UserControl Designer
UserControl is now a first-class Designer root alongside Form. The Visual Studio extension
provides matching item templates, root selection, document loading, save/reload, code generation,
reverse parsing, diagnostics, toolbox, property editing, and logical-DPI preview behavior.
A UserControl root is rendered without Form chrome.
Project-local custom UserControls are discovered from source and represented as design metadata.
Nested previews are assembled from .mfdesign data instead of loading the project assembly or
executing constructors, static initializers, property setters, or arbitrary user code. Cycles,
missing or stale design documents, and unsupported values fall back to a safe atomic placeholder;
the composed UserControl remains one selectable control in its parent document.
Experimental Android animation runtime
The Android backend now provides IPlatformAnimationFrameSource through Choreographer on the main
Looper. Frame requests are demand-driven, lifecycle pause/resume excludes background time, and
animator-duration scale changes are observed through Android settings. Pointer ownership uses stable
Android pointer IDs so concurrent touch sequences do not corrupt animation/effect state.
These changes validate the shared animation, layout, visual-state, Brush, theme, and interaction-
effect paths on the experimental backend. They do not make Android feature-equivalent to Windows:
complete windowing, platform services, accessibility, and broad physical-device coverage remain
future work.
Designer layout parity fix
The Designer now applies container Padding to child layout, preview geometry, selection,
hit-testing, guides, and generated/reloaded documents using the same padded content rectangle
semantics as runtime layout. Nested panels, containers, and designed UserControls therefore no
longer preview children against the unpadded client bounds.
Versioned release documentation
The release workflow produces four assets from the exact tag checkout:
ModernFormsNext-1.10.0-docs.zip— README, changelog, release and migration notes, documentation
sources, XML documentation, public API snapshot, and release metadata;ModernFormsNext-1.10.0-docs-html.zip— offline DocFX HTML, API reference, static assets, and
release metadata;ModernFormsNext-1.10.0-samples.zip— selected user-facing samples: ControlGallery, Explorer,
Outlaw, and the template/reference DemoApp;ModernFormsNext-1.10.0-sdk.zip— aggregate offline/reference bundle containing documentation,
HTML, samples, XML docs, the API snapshot, release notes, and metadata.
Metadata records the SemVer version, v1.10.0 tag, and exact tag commit. Release mode rejects a
missing or mismatched tag, version, or SHA. Documentation generation and validation run before the
GitHub Release is created and before any NuGet publication, preventing a documentation failure from
creating a partial release.
Compatibility and migration
The 1.10.0 public API comparison against 1.9.0 found 40 added public types, 548 added concrete
public/protected members, and no removed public identifiers or changed member signatures in the
published ModernFormsNext assemblies. There are no intentional package IDs, namespaces, target
frameworks, VSIX identity, or platform-contract removals, and no binary-breaking API change was
identified.
Under the repository's existing minor-release version policy, the weak-named library
AssemblyVersion values advance from 1.9.0.0 to 1.10.0.0. This is not a removed or changed API
signature, but consumers should perform the normal rebuild when updating package references.
Most applications can update package and VSIX references, rebuild, and continue without code
changes. The new ModernFormsNext.Path type can make an unqualified Path reference ambiguous in a
file that imports both ModernFormsNext and System.IO; qualify the vector type or alias
System.IO.Path. Existing immediate layout remains unchanged until a layout transition is enabled,
and existing .mfdesign documents require no schema migration.
See Migrating ModernFormsNext 1.9.0 applications to 1.10.0.
Known limitations
PathGeometrydoes not yet include SVG import, arc segments, geometry groups, or a general
Stretchcontract.- Brush interpolation requires compatible brush kinds and compatible gradient-stop structures.
- Custom animation/effect metadata is deliberately constrained in the Designer; arbitrary project
code is not executed for preview. - Android remains experimental and is not presented as a complete
Application.Run(Form)or
WindowKit implementation. - Manual browser and Visual Studio Designer smoke tests remain separate from deterministic build,
package, DocFX, and script validation.
Release-candidate validation
The 1.10.0 release candidate passed a no-cache solution restore; warning-free Debug and Release
solution builds; 1,112 automated tests, including 197 Designer, 72 Android backend, 7 Windows
backend, and 16 cross-platform sample tests; Android SmokeTest and cross-platform sample builds;
and Debug/Release VSIX archive validation.
Packaging produced and validated eight NuGet packages and seven symbol packages. A temporary
consumer project restored ModernFormsNext 1.10.0 from the local package source, built with no
warnings or errors, and ran a basic control-construction smoke test. The public API snapshot contains
13,463 identifiers from the seven published API assemblies.
DocFX 2.78.5 generated 879 HTML pages with no warnings or errors. The documentation script suite
passed all 32 assertions, and all four versioned ZIP bundles passed metadata, path-safety, content,
offline asset, and internal-link validation. Browser rendering and interactive Visual Studio
Designer checks remain manual gates; no physical-device Android result is inferred from builds.
Packages
The coordinated release produces eight 1.10.0 NuGet packages and seven matching symbol packages.
ModernFormsNext.Templates intentionally has no .snupkg.
| Package | Framework/content | Symbols |
|---|---|---|
ModernFormsNext |
net10.0, net10.0-windows |
yes |
ModernFormsNext.WindowKit |
net10.0 |
yes |
ModernFormsNext.WindowKit.Backend |
net10.0 |
yes |
ModernFormsNext.WindowKit.Backend.Windows |
net10.0 |
yes |
ModernFormsNext.Designing |
net10.0 |
yes |
ModernFormsNext.CodeGeneration |
net10.0 |
yes |
ModernFormsNext.Designer |
net10.0-windows |
yes |
ModernFormsNext.Templates |
dotnet new template content |
no |