README.md
June 23, 2026 · View on GitHub
Custom Avalonia Controls developed by Devolutions
Custom Controls [Work in Progress]
In this package we publish various custom controls as well as converters, markup extensions and other helper utilities used in our themes and Devolutions Remote Desktop Manager. The more generically useful ones are listed here (full documentation tba ...).
Installation
Avalonia 12 required. Packages
2026.6.17-avalonia12and later require Avalonia 12. The last stable release compatible with Avalonia 11 is2026.6.16.
Install the Devolutions.AvaloniaControls package via NuGet:
Install-Package Devolutions.AvaloniaControls
or .NET
dotnet add package Devolutions.AvaloniaControls
Controls
EditableComboBoxSearchHighlightTextBlockTabPane(ExtendsTabControlfor different styling only)TagInput(Wrapper for Ursa's TagInput control - manages tags/keywords/labels with add/remove functionality)
Converters
Usage: Converter={x:Static DevoConverters.<ConverterName>}
ColorToCssFillConverter
ConverterParameter: class(es) of the path(s) to apply colour to
Converts a Brush and CSS class(es) into a CSS string for SVG path styling.CornerRadiusExtractor
ConverterParameter: predefinedCornerRadiusSubset(enum)
Returns a new CornerRadius, to selectively apply a given CornerRadius to a subset of the four corners (0 to the others)HasClass/HasNotClass
ConverterParameter: class name to check for
Returns a boolean depending on whether the given element has the given classThicknessExtractor
ConverterParameter: predefinedThicknessSubset(enum)
Returns a new Thickness, to selectively apply a given Thickness to a subset of the four sides (0 to the others)
MultiConverters
Usage: <MultiBinding Converter="{x:Static DevoMultiConverters.<ConverterName>}">
BooleanToChoiceConverter
Takes a boolean and two value choices. I checks for the presence of the class given asConverterParameterand returns the first choice value if found, or the second one otherwise.
➡️ Use theBindingTogglerMarkupExtension instead for a more streamlined syntax.ClassToChoiceConverter
Takes a control's classes and two value choices. I checks for the presence of the class given asConverterParameterand returns the first choice value if found, or the second one otherwise.FirstNonEmptyStringMultiConverter
Returns the first non-empty string in the multi-value binding, ignores the restFirstNonNullValueMultiConverter
Returns the first non-null value in the multi-value binding, ignores the restIsExplicitlyTrueConverter
Takes a single input and returns a boolean based on whether the input is a boolean and true (useful to convert a possibleAvaloniaProperty.UnsetValueto 'False' for use in other boolean operations)IsUnsetConverter
Takes a single input and returnsTrueif it isAvaloniaProperty.UnsetValue.
MarkupExtensions
AddBindingMultiplyBindingAndBindingOrBindingBindingTogglerDynamicResourceTogglerWindowActiveBindingTogglerWindowActiveResourceTogglerWindowIsActiveBindingChangeColorOpacity