Version: 1.2
Documentation Version: 1.2
Author: Dalibor Votruba
URL: quadarax.com/ui-layout-def
A comprehensive XML-based format for describing user interface layouts with inheritance, pattern definitions, view organization, external includes, and platform-specific extensions. This format enables cross-platform UI generation with strict validation and modular component libraries.
The UI Layout Definition Format provides a standardized way to define user interfaces that can be translated to various platforms (Windows Forms, WPF, Avalonia, Qt, Web, Mobile). It emphasizes:
Window Includes Support
Enhanced Schema Validation
Expanded Platform Support
Advanced View Features
Improved Control Library
Views represent logical business functions (ProductView, OrderView) that group related windows and define shared data context and behaviors.
All controls and structures must be defined in the <patterns> section before use in windows.
Modular design allows splitting definitions across multiple files:
Wireframes use slots as placeholders that windows can fill with specific content.
Comprehensive validation rules ensure UI consistency and platform compliance.
<?xml version="1.0" encoding="UTF-8"?>
<ui-layout-def xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="ui-layout-definition ui-layout-def.xsd"
version="1.2">
<!-- Optional: Validation rules with external includes -->
<validation-rules>
<validation-include src="..." important="true/false" />
<rule name="...">...</rule>
</validation-rules>
<!-- Required: Pattern definitions with external includes -->
<patterns>
<pattern-include src="..." important="true/false" />
<control name="...">...</control>
<structure name="...">...</structure>
<wireframe name="...">...</wireframe>
</patterns>
<!-- View definitions with external includes -->
<views>
<view-include src="..." important="true/false" />
<view name="..." type="..." category="..." inherits="...">...</view>
</views>
<!-- NEW: Window includes -->
<window-includes>
<window-include src="..." important="true/false" />
</window-includes>
<!-- Window definitions (can be in external files) -->
<window name="..." title="..." wireframe="..." view="...">
<!-- Window content -->
</window>
</ui-layout-def>
Views are logical containers that group related windows, dialogs, and UI components that work together for a specific business function. They provide:
<view name="ProductView" type="business-entity" category="core" inherits="BaseEntityView">
<description>Product management functionality</description>
<!-- View metadata for code generation -->
<metadata>
<model-class>Product</model-class>
<view-model-class>ProductViewModel</view-model-class>
<controller-class>ProductController</controller-class>
<permissions>product.read,product.write</permissions>
</metadata>
<!-- View dependencies -->
<dependencies>
<view-ref name="CategoryView" relationship="lookup" required="false" />
<shared-component name="FileUploadComponent" required="true" />
</dependencies>
<!-- Shared data context -->
<data-context>
<property name="currentProduct" type="Product" scope="view" />
<property name="productList" type="ProductList" scope="view" />
</data-context>
<!-- Window associations -->
<windows>
<window-ref name="ProductListWindow" role="main" default="true" />
<window-ref name="ProductEditDialog" role="editor" modal="true" />
</windows>
<!-- View-level navigation -->
<navigation>
<action name="show-list" target="ProductListWindow" />
<action name="edit-product" target="ProductEditDialog" context="currentProduct" />
</navigation>
<!-- Communication patterns -->
<communication>
<publishes>
<event name="product-saved" data="product-id" />
</publishes>
<subscribes>
<event name="category-changed" source="CategoryView" handler="refresh-list" />
</subscribes>
</communication>
</view>
View Types:
business-entity - Product, Order, Customer managementprocess-flow - OrderProcessing, Checkout workflowsdashboard - MainDashboard, ReportsViewutility - Settings, UserPreferenceswizard - Setup wizards, guided processescomposite - Views composed of multiple sub-viewsmodule - Application modules containing multiple viewsbase - Base views for inheritanceCategories:
core - Essential business functionalityadmin - Administrative functionsreporting - Reports and analyticssystem - System-level functionalityframework - Base views for inheritancebusiness - Business-specific functionality<view name="OrderProcessingView" type="process-flow" category="core">
<workflow>
<step name="order-entry" window="OrderEntryWindow" next="payment" />
<step name="payment" window="PaymentWindow" next="confirmation" previous="order-entry" />
<step name="confirmation" window="ConfirmationWindow" previous="payment" />
</workflow>
</view>
<view name="ECommerceModule" type="module" category="business">
<module-views>
<view-ref name="ProductView" />
<view-ref name="OrderView" />
<view-ref name="CustomerView" />
</module-views>
<main-navigation>
<nav-item text="Products" view="ProductView" action="show-list" />
<nav-item text="Orders" view="OrderView" action="show-list" />
<nav-item text="Customers" view="CustomerView" action="show-list" />
</main-navigation>
</view>
<control name="Button" type="action" category="basic">
<constraints>
<allowed-parents>Panel,FormField</allowed-parents>
<allowed-children>none</allowed-children>
<container>false</container>
</constraints>
<attributes>
<attribute name="text" type="string" default="Button" required="true" />
<attribute name="enabled" type="bool" default="true" />
<attribute name="style" type="enum" values="normal,primary,danger" default="normal" />
</attributes>
<behavior>
<event name="click" required="true" />
</behavior>
</control>
The format supports platform-specific control libraries:
<control name="AvaloniaButton" type="action" category="avalonia-specific" inherits="Button">
<attributes>
<attribute name="click-mode" type="enum" values="Release,Press,Hover" default="Release" />
<attribute name="is-default" type="bool" default="false" />
<attribute name="command" type="string" default="" />
</attributes>
</control>
<control name="DataGridView" type="data" category="winforms-data">
<constraints>
<allowed-parents>Panel,GroupBox,TabPage,Form</allowed-parents>
<requires-structure>columns</requires-structure>
</constraints>
<attributes>
<attribute name="allowusertoaddrows" type="bool" default="true" />
<attribute name="selectionmode" type="enum" values="CellSelect,FullRowSelect" default="RowHeaderSelect" />
</attributes>
</control>
<patterns>
<pattern-include src="abstract-controls.xml" important="true" />
<pattern-include src="winform-controls.xml" important="true" />
<pattern-include src="avalonia-controls.xml" important="false" />
<pattern-include src="web-controls.xml" important="false" />
<!-- Local pattern definitions -->
</patterns>
<views>
<view-include src="business-views.xml" important="true" />
<view-include src="admin-views.xml" important="false" />
<!-- Local view definitions -->
</views>
<validation-rules>
<validation-include src="base-validation.xml" important="true" />
<validation-include src="view-validation.xml" important="true" />
<validation-include src="accessibility-rules.xml" important="false" />
<!-- Local validation rules -->
</validation-rules>
Version 1.2 introduces the ability to organize windows in separate files for better project structure and team collaboration.
<ui-layout-def version="1.2">
<patterns>
<!-- Pattern definitions -->
</patterns>
<views>
<!-- View definitions -->
</views>
<window-includes>
<window-include src="main-windows.xml" important="true" />
<window-include src="dialog-windows.xml" important="true" />
<window-include src="admin-windows.xml" important="false" />
</window-includes>
</ui-layout-def>
<?xml version="1.0" encoding="UTF-8"?>
<windows xmlns="ui-layout-definition">
<window name="MainWindow" title="Main Application" view="MainView">
<!-- Window definition -->
</window>
<window name="ProductListWindow" title="Products" view="ProductView">
<!-- Window definition -->
</window>
</windows>
<validation-rules>
<!-- View-specific validation -->
<rule name="view-window-association">
<description>All windows must be associated with a view</description>
<constraint>Every window must be referenced by at least one view</constraint>
</rule>
<rule name="view-dependency-validation">
<description>View dependencies must be valid</description>
<constraint>Referenced views in dependencies must be defined</constraint>
</rule>
<!-- Control validation -->
<rule name="control-definition-required">
<description>All controls used in windows must be defined in patterns</description>
<constraint>Every control element must reference a defined pattern</constraint>
</rule>
<!-- Include validation -->
<rule name="include-validation">
<description>Important includes must be accessible</description>
<constraint>Files marked important="true" must exist and be loadable</constraint>
</rule>
</validation-rules>
project/
├── main.xml # Main document with includes
├── patterns/
│ ├── abstract-controls.xml # Base control definitions
│ ├── winform-controls.xml # WinForms-specific controls
│ └── avalonia-controls.xml # Avalonia-specific controls
├── views/
│ ├── business-views.xml # Business entity views
│ └── admin-views.xml # Administrative views
├── windows/
│ ├── main-windows.xml # Primary application windows
│ ├── dialog-windows.xml # Modal dialogs and popups
│ └── admin-windows.xml # Administrative interfaces
└── validation/
├── base-validation.xml # Core validation rules
├── view-validation.xml # View-specific rules
└── accessibility-rules.xml # Accessibility compliance
Generate different outputs for different platforms:
<!-- For WinForms -->
<pattern-include src="winform-controls.xml" important="true" />
<pattern-include src="avalonia-controls.xml" important="false" />
<!-- For Avalonia -->
<pattern-include src="avalonia-controls.xml" important="true" />
<pattern-include src="winform-controls.xml" important="false" />
important="true"Windows Forms / WPF
Avalonia UI
Qt / KDE
Web / HTML
Mobile
Version 1.2 maintains full backward compatibility with 1.1 documents. Existing documents will work without modification.
You can migrate gradually by:
This format specification enables consistent, validated, cross-platform UI definitions with powerful view organization, external includes, inheritance, and modular design capabilities.