Nextended.UI
10.1.33
See the version list below for details.
dotnet add package Nextended.UI --version 10.1.33
NuGet\Install-Package Nextended.UI -Version 10.1.33
<PackageReference Include="Nextended.UI" Version="10.1.33" />
<PackageVersion Include="Nextended.UI" Version="10.1.33" />
<PackageReference Include="Nextended.UI" />
paket add Nextended.UI --version 10.1.33
#r "nuget: Nextended.UI, 10.1.33"
#:package Nextended.UI@10.1.33
#addin nuget:?package=Nextended.UI&version=10.1.33
#tool nuget:?package=Nextended.UI&version=10.1.33
![]()
Nextended.UI
WPF and Windows desktop helpers โ a global input-binding manager with hold/sequence matching, DirectInput and XInput gamepad readers, key-bind capture controls, converters, behaviours, markup extensions and runtime-defined PropertyGrid types.
๐ Documentation: English ยท Deutsch
Installation
dotnet add package Nextended.UI
Windows-only by design โ the target frameworks carry the -windows suffix and the package
references WPF, Microsoft.Xaml.Behaviors.Wpf, MouseKeyHook and SharpDX.
Feature map
| Area | API |
|---|---|
| Input bindings | InputBindingManager (RegisterBinding, StartListeningForBinding, IsHoldingBinding, GetHoldingTime), StoredInputBinding (Combo, SetMinTime, Flatten), InputSequenceMatcher, KeyDisplayName, KeyLocalizer |
| Gamepads | IGamepadReader, XInputGamepadReader, DirectInputGamepadReader, GamepadEventArgs |
| Key-bind UI | KeyBindChanger, KeyBindSequenceBox, KeyBindChangedEventArgs |
| WPF plumbing | Behaviors, converters (UIElementToImageConverter, โฆ), markup extensions (StaticImage, โฆ), element extensions |
| Runtime types | CustomClass / DynamicProperty โ build a type at runtime for a PropertyGrid |
| PropertyGrid | PropertyGridSearchExtenter, PropertyGridTypeEditor |
| View models | ItemFilterModel |
| Theming | Bundled WPF theme dictionaries under Theming/Themes |
| Shell | FileDescription, ExtractIconFromFile, Margins |
Quick start
Global shortcuts, including hold and sequence
InputBindingManager sits on top of a low-level keyboard/mouse hook, so bindings fire even when
your window does not have focus.
Bindings are registered under a string id, and you react to that id โ so the shortcut can be rebound at runtime without touching the handler.
using System.Windows.Forms; // Keys
using Nextended.UI.Input;
using var manager = new InputBindingManager();
// Single key or mouse button โ implicit conversions from Keys, MouseButtons,
// GamepadButton and GamepadSlider mean no wrapper call is needed.
manager.RegisterBinding("emergency-stop", Keys.Escape);
// A combination
manager.RegisterBinding("command-palette",
StoredInputBinding.Combo([Keys.ControlKey, Keys.ShiftKey, Keys.P]));
// Must be held before it counts โ MinTime is in milliseconds
manager.RegisterBinding("force-quit", StoredInputBinding.Combo([Keys.Alt, Keys.F4]).SetMinTime(750));
manager.OnBindingPressed += id => Handle(id);
manager.OnBindingReleased += id => Release(id);
manager.OnMouseMove += e => Track(e);
Because the manager uses a low-level hook, bindings fire even when your window does not have focus. Querying hold state directly instead of reacting to an event:
if (InputBindingManager.IsHoldingBinding("emergency-stop")) { โฆ }
TimeSpan held = InputBindingManager.GetHoldingTime("emergency-stop");
if (InputBindingManager.IsHoldingBindingFor("force-quit", TimeSpan.FromSeconds(2))) { โฆ }
binding.Flatten() expands a combo into its parts โ handy for rendering a shortcut in the UI โ
and WithoutMinTime() returns a copy without the hold requirement. InputSequenceMatcher handles
ordered sequences (the Konami-code shape) rather than simultaneous combinations.
Letting the user rebind a shortcut
StartListeningForBinding puts the manager into capture mode: the next input becomes the new
binding for that id and is reported through OnBindingSet.
manager.OnBindingSet += (id, binding) => settings.Save(id, binding);
manager.StartListeningForBinding("command-palette");
The bundled controls wrap that flow:
<nx:KeyBindChanger x:Name="Changer" />
<nx:KeyBindSequenceBox x:Name="SequenceBox" />
Changer.KeyBindChanged += (_, e) => settings.Save(e.NewValue); // e.OldValue is there too
Changer.KeyDeleted += (_, _) => settings.Clear();
SequenceBox.Changed += (_, sequence) => settings.SaveSequence(sequence);
KeyDisplayName / KeyLocalizer turn a key into the label the user expects, localised โ so
OemQuestion shows up as the key actually printed on their keyboard layout.
Gamepads
using Nextended.UI.Input.Gamepad;
using IGamepadReader pad = new XInputGamepadReader(); // or DirectInputGamepadReader
pad.ButtonEvent += (_, e) =>
{
e.Button; // raw code
e.GamepadButton; // parsed enum, null when it is not a button event
e.IsPressed; // null for axis/slider events
e.Value; // analogue value for sliders and sticks
e.IsStickEvent;
};
XInputGamepadReader covers Xbox-style controllers; DirectInputGamepadReader covers the other
devices XInput does not enumerate. Hand a reader to the binding manager with
manager.AttachGamepadReader(pad) and gamepad buttons become bindings like any key.
A PropertyGrid over data that has no class
using Nextended.UI.Classes;
var custom = new CustomClass();
custom.AddProperty<string>("Host");
custom.AddProperty<int>("Port");
propertyGrid.SelectedObject = custom;
CustomClass implements ICustomTypeDescriptor, so the PropertyGrid sees real properties even
though the shape was decided at runtime โ the usual answer to "the settings come from a config
file and I do not want to generate a class".
Rendering a control to an image
var converter = new UIElementToImageConverter();
var bitmap = converter.Convert(myControl, typeof(BitmapSource), null, CultureInfo.CurrentCulture);
Supported frameworks
net8.0-windowsnet9.0-windowsnet10.0-windows
Dependencies
- Nextended.Core
- Microsoft.Xaml.Behaviors.Wpf
The Nextended family
The other 17 packages in the suite:
Core libraries
- Nextended.Core โ Foundation library โ extension methods, custom types (Money, Date, BaseId, SuperType), class mapping, deep clone, encryption, hashing and the code-generation attributes.
- Nextended.Cache โ Expression-based caching โ automatic cache keys from method expressions, CacheProvider with condition-based invalidation, thread-safe AddOrGetExisting.
Data access
- Nextended.EF โ Entity Framework Core extensions โ graph loading (LoadGraphAsync, IncludeAll, MultiInclude), declarative include definitions, paging, dynamic sorting and bulk operations.
ASP.NET Core & web
- Nextended.Web โ ASP.NET Core utilities โ zero-config OData (AddODataAuto), composable IQueryable OData appliers, strongly typed controller URLs, streaming download helpers and a background executor that can replay a captured request.
- Nextended.ResponseFilters โ Fluent, provider-agnostic pipeline that redacts, masks, rounds, truncates, hashes, prunes and restructures response DTOs before serialization โ per request, per user, per permission.
- Nextended.ResponseFilters.AspNetCore โ ASP.NET Core adapter for Nextended.ResponseFilters โ registers the pipeline as a global IAsyncResultFilter and replays structural edits against the serialized JSON tree.
UI libraries
- Nextended.Blazor โ Blazor helpers โ IBrowserFile extensions (bytes, data URLs, downloads), a hierarchical model for browsing inside uploaded zip/tar/rar archives, MIME-type detection and component-parameter reflection.
- Nextended.UI โ WPF and Windows desktop helpers โ a global input-binding manager with hold/sequence matching, DirectInput and XInput gamepad readers, key-bind capture controls, converters, behaviours, markup extensions and runtime-defined PropertyGrid types. (this package)
Code generation & tooling
- Nextended.Imaging โ Image processing โ aspect-preserving resize, crop, colour replacement, brightness-based foreground picking, thumbnail generation, byte/data-URL conversion and MIME detection from magic bytes.
- Nextended.CodeGen โ Roslyn source generator โ DTOs and interfaces from your entities, strongly typed classes from JSON/XML, lookup tables from Excel, and documentation from source files.
.NET Aspire hosting
- Nextended.Aspire โ Conditional AppHost builder extensions โ WithReferenceIf / WaitForIf / WithExplicitStartIf, strongly typed environment variables from config objects, HTTPS dev-cert wiring, Docker guards, GitHub-source resources and npm app discovery.
- Nextended.Aspire.Hosting.Supabase โ The complete Supabase stack โ Postgres, Auth (GoTrue), REST, Realtime, Storage, Studio, Kong and Edge Functions โ as one composable Aspire resource.
- Nextended.Aspire.Hosting.N8n โ The n8n workflow-automation platform as an Aspire resource, with Postgres persistence, workflow import and a typed client for triggering workflows from .NET.
- Nextended.Aspire.Hosting.Grafana โ Grafana, Prometheus, Loki, Tempo, Promtail, cAdvisor, postgres_exporter and the OpenTelemetry Collector as composable resources with auto-provisioned datasources.
- Nextended.Aspire.Hosting.WebDataStudio โ WebDataStudio โ a browser database studio for PostgreSQL, MySQL, SQL Server, SQLite, Oracle, DuckDB, ClickHouse, MongoDB and Redis โ wired to the databases of your stack, with accounts and roles, an optional SQL assistant, and an MCP endpoint for AI agents.
- Nextended.Aspire.Hosting.AspireUI โ AspireUI โ the visual AppHost builder โ as a resource inside your own Aspire stack, with an optional pre-seeded admin user and a starter stack built from your project paths.
- Nextended.Aspire.Hosting.LocalAI โ Self-hosted, OpenAI-compatible multimodal AI โ image generation, text-to-speech, speech-to-text and video โ with gallery model management, GPU support and Open WebUI.
- Nextended.Aspire.Hosting.Php โ Run PHP endpoints inside your Aspire stack โ a docroot folder or a single router script served by PHP's built-in web server, with php.ini settings as fluent options.
Links
- ๐ฆ NuGet package
- ๐ Documentation โ English
- ๐ Dokumentation โ Deutsch
- ๐ Documentation portal
- ๐งโ๐ป Source code
- ๐ Report an issue
License
GPL-3.0-or-later โ see LICENSE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0-windows7.0 is compatible. net9.0-windows was computed. net9.0-windows7.0 is compatible. net10.0-windows was computed. net10.0-windows7.0 is compatible. |
-
net10.0-windows7.0
- Microsoft.Xaml.Behaviors.Wpf (>= 1.1.39)
- MouseKeyHook (>= 5.7.1)
- Nextended.Core (>= 10.1.33)
- SharpDX (>= 4.2.0)
- SharpDX.DirectInput (>= 4.2.0)
- SharpDX.XInput (>= 4.2.0)
- System.Data.DataSetExtensions (>= 4.5.0)
-
net8.0-windows7.0
- Microsoft.Xaml.Behaviors.Wpf (>= 1.1.39)
- MouseKeyHook (>= 5.7.1)
- Nextended.Core (>= 10.1.33)
- SharpDX (>= 4.2.0)
- SharpDX.DirectInput (>= 4.2.0)
- SharpDX.XInput (>= 4.2.0)
-
net9.0-windows7.0
- Microsoft.Xaml.Behaviors.Wpf (>= 1.1.39)
- MouseKeyHook (>= 5.7.1)
- Nextended.Core (>= 10.1.33)
- SharpDX (>= 4.2.0)
- SharpDX.DirectInput (>= 4.2.0)
- SharpDX.XInput (>= 4.2.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 10.1.34 | 52 | 8/27/2026 |
| 10.1.33 | 82 | 8/24/2026 |
| 10.1.32 | 89 | 8/20/2026 |
| 10.1.31 | 89 | 8/19/2026 |
| 10.1.30 | 88 | 8/19/2026 |
| 10.1.21 | 109 | 7/30/2026 |
| 10.1.20 | 109 | 7/26/2026 |
| 10.1.19 | 101 | 7/23/2026 |
| 10.1.18 | 106 | 7/22/2026 |
| 10.1.17 | 98 | 7/21/2026 |
| 10.1.16 | 107 | 7/21/2026 |
| 10.1.15 | 105 | 7/21/2026 |
| 10.1.14 | 109 | 7/16/2026 |
| 10.1.13 | 113 | 7/12/2026 |
| 10.1.12 | 117 | 7/12/2026 |
| 10.1.11 | 122 | 7/6/2026 |
| 10.1.10 | 125 | 6/16/2026 |
| 10.1.9 | 123 | 5/29/2026 |
| 10.1.8 | 123 | 5/19/2026 |
| 10.1.7 | 130 | 5/16/2026 |