UnoPropertyGrid is a desktop-first property grid for Uno Platform and WinUI 3.
Current scope:
- Target Uno Skia Desktop (WinUI 3 port is included but not the primary focus).
- Do not target mobile during the bootstrap phase (v0.x.x).
- Windows 11 (Windows 10 may work but is not a primary target)
- macOS, 3 most recent versions from 2023-2025
- Ubuntu latest LTS (other Linux distributions may work but are not primary targets)
If you are looking for support of a specific platform, business sponsorship is the way to accelerate that work. Please reach out to us at homepage.
Two NuGet packages are available:
The core property grid component.
Optional Roslyn source generator for AOT-safe property discovery (see AOT support below).
xmlns:pg="using:UnoPropertyGrid"
<pg:PropertyGridControl SelectedObject="{x:Bind MyObject}" />The property grid discovers properties automatically via TypeDescriptor and reflection. No extra setup is required for desktop targets.
Study the sample project to see custom editors and design-time metadata in action.
There are several built-in editors for common types (string, numeric types, bool, enum, etc.) and you can also create custom editors for your own types.
For NativeAOT, trimmed Blazor WebAssembly, or any target where the trimmer removes unreferenced metadata, add the companion source generator:
dotnet add package LeXtudio.UnoPropertyGrid
dotnet add package LeXtudio.UnoPropertyGrid.Generator
Annotate each type you want to inspect at the assembly level (typically in the same file that declares the type, or in a dedicated AssemblyInfo.cs):
[assembly: UnoPropertyGrid.GeneratePropertyGridDescriptors(typeof(MyApp.DeviceSettings))]
[assembly: UnoPropertyGrid.GeneratePropertyGridDescriptors(typeof(MyApp.NetworkConfig))]Then swap the default provider before assigning SelectedObject:
// GeneratedPropertyGridDescriptors is emitted by the source generator at compile time.
PropertyGrid.PropertyProvider = GeneratedPropertyGridDescriptors.CreateProvider();
PropertyGrid.SelectedObject = myDeviceSettings;The generator reads [Category], [Description], [DisplayName], [ReadOnly], and [Browsable] attributes at compile time and emits typed lambda accessors — no PropertyInfo.GetValue or TypeDescriptor is involved in property discovery at runtime.
Study the AOT sample project for a complete working example.
Early preview (v0.x.y) releases are available on NuGet.
The API is not yet stable and may change without a major version bump. Feedback is welcome to help shape the future of UnoPropertyGrid.
- More built-in editors (currently only a few basic types are supported)
- Finish dark theme support (currently functional but not fully polished)
- IME support improvements (currently functional but not fully polished)
- Accessibility support (screen readers, keyboard navigation, etc.)
UnoPropertyGrid is licensed under the MIT License. See LICENSE for details.
Copyright (c) 2026 LeXtudio, Inc. All rights reserved.
