Nextended.UI 10.1.31

There is a newer version of this package available.
See the version list below for details.
dotnet add package Nextended.UI --version 10.1.31
                    
NuGet\Install-Package Nextended.UI -Version 10.1.31
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Nextended.UI" Version="10.1.31" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Nextended.UI" Version="10.1.31" />
                    
Directory.Packages.props
<PackageReference Include="Nextended.UI" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Nextended.UI --version 10.1.31
                    
#r "nuget: Nextended.UI, 10.1.31"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Nextended.UI@10.1.31
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Nextended.UI&version=10.1.31
                    
Install as a Cake Addin
#tool nuget:?package=Nextended.UI&version=10.1.31
                    
Install as a Cake Tool

Nextended

Nextended.UI

NuGet Downloads License

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-windows
  • net9.0-windows
  • net10.0-windows

Dependencies

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.
  • 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.

License

GPL-3.0-or-later โ€” see LICENSE.

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
Loading failed