Друзья, совсем недавно наша компания Эремекс зарегистрировала корпоративный аккаунт на Хабре, и теперь здесь будут выходить новости, статьи и всё интересное, что происходит с продуктами компании. В том числе и новости из нашей команды, которая занимается кроссплатформенной библиотекой контролов Eremex Controls для Avalonia UI. Мы надеемся, что вы найдете эту и будущие публикации полезными. Так что оставайтесь с нами, будем рады видеть ваши комментарии и мнения.
А сегодня мы бы хотели рассказать о дальнейшем развитии нашей библиотеки Eremex Controls для Avalonia UI. На днях вышло большое обновление библиотеки до версии 1.2, в котором добавили множество полезных функций для самых востребованных контролов. О главных из них расскажем ниже.

Но перед этим позвольте вкратце напомнить, что из себя представляет библиотека Eremex Controls.
EMX Controls — профессиональная библиотека визуальных компонентов для создания графических интерфейсов в кроссплатформенных приложениях на базе Avalonia UI. В ее состав входят такие контролы, как:
И многие другие.
Библиотека поддерживает все популярные отечественные и зарубежные операционные системы: Windows 11, Windows 10, Astra Linux, Альт Linux, РЕД ОС, Debian, Ubuntu и macOS. Она также зарегистрирована в российском реестре программного обеспечения: https://reestr.digital.gov.ru/reestr/2623413/?sphrase_id=4840131.
Дополнительные подробности на нашем сайте:
Если вы не следили за развитием библиотеки с самого начала, вы можете ознакомиться с нашими предыдущими публикациями:
Пример использования библиотеки EMX Controls для создания финансовых кроссплатформенных приложений
Как мы улучшили скорость работы табличных контролов библиотеки EMX Controls для Avalonia UI
Библиотека EremexControls.NET для Avalonia UI — Большое обновление (v 1.1 EAP)
Библиотека EremexControls.NET для Avalonia UI — Обновление июль-август 2024
Библиотека EremexControls.NET для Avalonia UI — Обновление май-июнь 2024
Библиотека EremexControls.NET для Avalonia UI — Обновление март-апрель 2024
В новой версии библиотеки EMX Controls мы уделили особое внимание инструментам для работы с данными — контролам DataGrid и TreeList, которые служат для отображения и редактирования плоских и иерархических таблиц. В эти контролы мы добавили ряд функций, о которых давно просили нас наши пользователи.
Также развитие получили контролы для создания MDI-интерфейса (DockManager), построения графиков (Cartesian Chart) и другие компоненты.
DataGrid и TreeList – Бэнды
При отображении табличных данных нередко возникает задача визуально сгруппировать колонки под общими заголовками. В версии 1.2 в контролах DataGrid и TreeList появилась поддержка Бэндов (от англ. band - связка, диапазон, объединять). Используя бэнды, теперь можно отобразить дополнительные заголовки над колонками и даже создать многоуровневую структуру.

Основные возможности:
Простая настройка бэндов: после создания структуры бэндов-объектов они связываются с колонками по имени.
Многоуровневые бэнды (показаны на картинке выше)
Автоматическая генерация бэндов и связь их с колонками на основе атрибутов DataAnnotations.
Более подробную информацию о создании бэндов с примерами вы можете найти в нашей документации:
О документации на английском
В самой первой нашей статье мы поднимали вопрос языка, на котором создавать документацию для продукта. И тогда, и сейчас основным языком для написания документации для библиотеки контролов мы выбираем английский. Это не только международный язык общения в IT, но и язык, из которого вышло большинство технических терминов. Их прямой перевод на русский зачастую лишь усложняет понимание. В нашей документации используется довольно простой английский, который легко поймут не только русскоговорящие, но и, надеемся, наши коллеги из Китая и других далеких стран.
Основной массив русской версии документации был создан на основе автоматического перевода английской версии с помощью Яндекс Переводчика. Но для перевода некоторых сложных топиков мы прибегли к помощи нейросети Deepseek. Во всех переведенных статьях мы указали авторство перевода.
DataGrid и TreeList – Фильтры в Колонках
Базовый функционал должен быть удобным. Это касается и механизма фильтрации, который должен быть как удобным, так и быстрым. Начиная с версии 1.2, пользователи могут фильтровать данные прямо из заголовков колонок: просто открыть выпадающий список и выбрать значение для применения фильтра.

В текущей версии поддерживается выбор только одного значения в списке фильтрации. Но в скором времени мы добавим UI и для множественного выбора.
Мы также реализовали API, позволяющий создавать фильтрационные критерии в коде. В выражениях можно использовать множество операторов и функций для работы со значениями разных типов (числа, строки, дата/время и логические значения). Пример:
dataGrid.FilterString = "[FirstName] In ('Julia', 'Janet', 'Pat') AND [Position] = 'Accountant'";

При применении любого фильтра (как через UI, так и программно) в нижней части контрола теперь показывается фильтрационная панель. Она позволяет временно отключить текущий фильтр или полностью отменить его.
Документация:
На английском: Filter and Search
На русском: Фильтрация и поиск
DataGrid и TreeList – Экспорт и Копирование в Буфер Обмена
Часто возникают ситуации, когда необходимо выгрузить данные из контрола в один из популярных форматов. В новой версии библиотеки контролы DataGrid и TreeList поддержали экспорт в форматы XLSX и PDF, что открывает большие возможности для дальнейшей обработки данных и их печати.
Хотелось бы акцентировать внимание на сохранении конфигурации данных при экспорте в XLSX. Механизм экспорта переносит правила сортировки и группировки данных, а также форматирования значений ячеек в результирующий XLSX-документ.

Экспорт в PDF работает по принципу WYSIWYG, т.е. результат экспорта максимально приближен к изначальному макету контрола DataGrid и TreeList.

При экспорте вы можете дополнительно настроить ряд параметров (например, при экспорте в PDF - формат бумаги и отступы, а при экспорте в XLSX - настройки форматирования, культуру и т.д.)
В новой версии мы также добавили метод для копирования выбранных строк в системный буфер обмена. При этом вы можете включать или исключать заголовки колонок из копирования.
Документация:
Docking UI - Переключатель Документов
Для удобной навигации в сложных многооконных интерфейсах, созданных с помощью компонента DockManager, мы добавили встроенный Document Switcher (Переключатель Документов). Этот инструмент вам знаком по Visual Studio IDE и JetBrains Rider. Он отображает список всех открытых документов и панелей и позволяет быстро переключаться между ними.

Пользователь может нажать CTRL+TAB или CTRL+SHIFT+TAB, чтобы открыть Document Switcher, и уже в нем активировать нужную панель.
Документация:
На английском: Document Switcher
На русском: Переключатель документов
Cartesian Chart - График Lollipop
Cartesian Chart — один из больших и популярных контролов в нашей библиотеке, поддерживающий построение множества типов диаграмм – от точечных и линейных до столбчатых и "японских свечей". В новой версии добавился еще один вид диаграмм, так называемый Lollipop ("леденец"). В нем каждая точка представляется в виде вертикальной или горизонтальной линии с акцентным маркером на конце. Классические круглые маркеры действительно создают ассоциацию с леденцами.

Если стандартные маркеры вам не подходят, вы можете заменить их на любую SVG-иконку.
Документация:
На английском: Lollipop Series View
На русском: Серия Lollipop
Больше подробностей о новой версии библиотеки контролов вы найдете по ссылке ниже:
Демо-приложение
Лучший способ оценить библиотеку контролов — увидеть ее в действии. В нашем демо-приложении мы постарались представить все возможности библиотеки контролов EMX Controls.

Вы можете скачать Offline-версию приложения и запустить ее с помощью всего лишь одной команды:
Или открыть Online-версию демо-приложения в браузере:
Функциональность online-версии, к сожалению, ограничена возможностями WebAssembly.
Использование Библиотеки в Своих Проектах
Библиотека контролов Eremex Controls доступна на сайте nuget.org. Поэтому вы всегда можете ее протестировать в своих проектах. О том, как создать проект с нуля, мы написали руководство в нашей документации.
Заключение
Выход версии 1.2 — большой шаг в развитии библиотеки Eremex Controls, а ваши отзывы и комментарии помогут нам двигаться в правильном направлении. Присоединяйтесь к нашему Telegram-каналу, чтобы быть на связи с командой разработчиков, задавайте вопросы и делитесь идеями.
Команда EMX Controls
Комментарии (15)

dephonica
23.10.2025 02:50На первых взгляд контролы, визуально, не хуже, чем упомянутые выше C1, WebAssembly демка впечатляет. Особенно радует, что они для Avalonia UI - эта библиотека один из немногих (а для .NET фактически единственный) способ сделать мульти-платформенное native приложение с полноценным, не браузерным, UI. Да, она тормознее WPF, но где сейчас WPF...

xtraroman
23.10.2025 02:50Очень рады, что WebAssembly версия демки произвела хорошее впечатление. Буквально на днях обнаружили что мы таскаем в Web версии тяжелые ресурсы для 3d модулей которые у нас пока только для десктопа. В следующем обновлении поправим. Так же, у нас есть несколько идей для проектов на основе WebAssembly технологии. Это направление точно получит развитие.

Siemargl
23.10.2025 02:50Да, она тормознее WPF
А что, так бывает? о_О

xtraroman
23.10.2025 02:50В такой общей формулировке сложно спорить. Наверняка найдется сценарий когда wpf окажется быстрее. Но по моим ощущениям, авалония не тормознее WPF в большинстве сценариев с которыми я сталкиваюсь ежедневно по работе.

dephonica
23.10.2025 02:50Если использовать кастомные компоненты, не сильно увлекаться bindings и триггерить рендер вручную, то WPF очень быстрая со всеми её штатными прозрачностями, анимациями и размытиями. Но у меня специфика области где я её применял - это интерфейсы для аудио и видео процессинга, а не бухгалтерские датагриды в пол миллиона строк.
Скрытый текст


xtraroman
23.10.2025 02:50Красивый UI.
В авалонии можно свободно посмотреть детали реализации рендера,
если нашли проблему прислать им pull request и в разумные сроки получить официальный билд с исправлениями.
Это намного удобнее чем WPF который в плане рендеринга закрыт и сейчас уже совсем не развивается.

dephonica
23.10.2025 02:50Спасибо.
В коде по ссылке реализация рендеринга "в лоб" -- минимально-достаточная, без оптимизаций для частных случаев, на языке C# в safe-mode, с использованием библиотек-оберток типа SharpDX. Поэтому она по-умолчанию будет медленнее, чем оптимизированная низкоуровневая реализация с ручным управлением памятью. Зато в виде байт-кода запускается на любой платформе.
Думаю именно из-за обилия низкоуровневых хаков майки так и не смогли перенести WPF ни на одну альтернативную платформу.

xtraroman
23.10.2025 02:50>так и не смогли перенести WPF ни на одну альтернативную платформу.
Я думаю, они не захотели просто. Если помните, у них были WinUI UWP WinRT и в итоге им перестали доверять разработчики. Какой смысл учить новую технологию, если они через годик ее похоронят ).

dephonica
23.10.2025 02:50Возможно просто задавили массой менеджеры и техлиды из конкурирующих команд с синдромом "сделано не нами - переписать с нуля", и пошло-поехало.

Siemargl
23.10.2025 02:50а компонент графика откуда?
симпатичный

dephonica
23.10.2025 02:50Компонент кастомный и реализован с чистого листа, а за красоту спасибо FabFilter - это их визуальный дизайн, который я использовал в качестве референса, расширив его функциональность. Поэтому релиза с таким UI не существует, он был только для внутреннего использования.
Оригинал у FabFilter реализован на Qt и немного немного динамичнее, но и мой WPF вариант получился вполне себе гладким в плане ощущений от использования (очень старое видео, PC CPU CoreQuad 2008 года производства, GeForce 640):
Скрытый текст
NeriaLab
На мой личный взгляд и к моему сожалению, по визуалу, он сильно уступает ComponentOne. Давно ищу компоненты, похожие по своему функционалу на C1
P.S.: Нашел плюсик, вкладки симпатичные,
xtraroman
Понимая что у людей разные вкусы, мы предусмотрели возможность переключения визуальных тем. На текущий момент у нас нет темы похожей на С1, но мы постараемся учесть ваше пожелание в будущих релизах.
Так же, мы предусмотрели механизм модификации встроенных тем. Процесс модификации описан тут
https://eremexcontrols.net/controls/themes/modify-control-themes/
Исходники тем лежат на гитхаб
https://github.com/Eremex/controlthemes
Можно изменить любой визуальный аспект.
NeriaLab
Тема - это тема, это поправимо, но еще я говорю про функционал. Grid - действительно - классные в C1, как и ListView, TreeView + фильтры. Посмотрите, может возьмёте себе на заметку
xtraroman
Спасибо. Посмотрим.