README.md

June 23, 2026 · View on GitHub

image

Custom Avalonia Controls developed by Devolutions

License: MIT Build Status NuGet Version NuGet Downloads

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-avalonia12 and later require Avalonia 12. The last stable release compatible with Avalonia 11 is 2026.6.16.

Install the Devolutions.AvaloniaControls package via NuGet:

Install-Package Devolutions.AvaloniaControls

or .NET

dotnet add package Devolutions.AvaloniaControls

Controls

  • EditableComboBox
  • SearchHighlightTextBlock
  • TabPane (Extends TabControl for 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: predefined CornerRadiusSubset (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 class
  • ThicknessExtractor
    ConverterParameter: predefined ThicknessSubset (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 as ConverterParameter and returns the first choice value if found, or the second one otherwise.
    ➡️ Use the BindingToggler MarkupExtension 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 as ConverterParameter and 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 rest
  • FirstNonNullValueMultiConverter
    Returns the first non-null value in the multi-value binding, ignores the rest
  • IsExplicitlyTrueConverter
    Takes a single input and returns a boolean based on whether the input is a boolean and true (useful to convert a possible AvaloniaProperty.UnsetValue to 'False' for use in other boolean operations)
  • IsUnsetConverter
    Takes a single input and returns True if it is AvaloniaProperty.UnsetValue.

MarkupExtensions

  • AddBinding
  • MultiplyBinding
  • AndBinding
  • OrBinding
  • BindingToggler
  • DynamicResourceToggler
  • WindowActiveBindingToggler
  • WindowActiveResourceToggler
  • WindowIsActiveBinding
  • ChangeColorOpacity