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

А сегодня мы бы хотели рассказать о дальнейшем развитии нашей библиотеки Eremex Controls для Avalonia UI. На днях вышло большое обновление библиотеки до версии 1.2, в котором добавили множество полезных функций для самых востребованных контролов. О главных из них расскажем ниже.

article-v12-feed-image
Но перед этим позвольте вкратце напомнить, что из себя представляет библиотека 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 мы уделили особое внимание инструментам для работы с данными — контролам DataGrid и TreeList, которые служат для отображения и редактирования плоских и иерархических таблиц. В эти контролы мы добавили ряд функций, о которых давно просили нас наши пользователи.

Также развитие получили контролы для создания MDI-интерфейса (DockManager), построения графиков (Cartesian Chart) и другие компоненты.

DataGrid и TreeList – Бэнды

При отображении табличных данных нередко возникает задача визуально сгруппировать колонки под общими заголовками. В версии 1.2 в контролах DataGrid и TreeList появилась поддержка Бэндов (от англ. band - связка, диапазон, объединять). Используя бэнды, теперь можно отобразить дополнительные заголовки над колонками и даже создать многоуровневую структуру.

article-v12-bands
Бэнды

Основные возможности:

  • Простая настройка бэндов: после создания структуры бэндов-объектов они связываются с колонками по имени.

  • Многоуровневые бэнды (показаны на картинке выше)

  • Автоматическая генерация бэндов и связь их с колонками на основе атрибутов DataAnnotations.

Более подробную информацию о создании бэндов с примерами вы можете найти в нашей документации:

О документации на английском

В самой первой нашей статье мы поднимали вопрос языка, на котором создавать документацию для продукта. И тогда, и сейчас основным языком для написания документации для библиотеки контролов мы выбираем английский. Это не только международный язык общения в IT, но и язык, из которого вышло большинство технических терминов. Их прямой перевод на русский зачастую лишь усложняет понимание. В нашей документации используется довольно простой английский, который легко поймут не только русскоговорящие, но и, надеемся, наши коллеги из Китая и других далеких стран.

Основной массив русской версии документации был создан на основе автоматического перевода английской версии с помощью Яндекс Переводчика. Но для перевода некоторых сложных топиков мы прибегли к помощи нейросети Deepseek. Во всех переведенных статьях мы указали авторство перевода.

DataGrid и TreeList – Фильтры в Колонках

Базовый функционал должен быть удобным. Это касается и механизма фильтрации, который должен быть как удобным, так и быстрым. Начиная с версии 1.2, пользователи могут фильтровать данные прямо из заголовков колонок: просто открыть выпадающий список и выбрать значение для применения фильтра.

article-v12-columnfilters
Выпадающий фильтр

В текущей версии поддерживается выбор только одного значения в списке фильтрации. Но в скором времени мы добавим UI и для множественного выбора.

Мы также реализовали API, позволяющий создавать фильтрационные критерии в коде. В выражениях можно использовать множество операторов и функций для работы со значениями разных типов (числа, строки, дата/время и логические значения). Пример:

dataGrid.FilterString = "[FirstName] In ('Julia', 'Janet', 'Pat') AND [Position] = 'Accountant'";
article-v12-filterincode
Пример фильтрации через код

При применении любого фильтра (как через UI, так и программно) в нижней части контрола теперь показывается фильтрационная панель. Она позволяет временно отключить текущий фильтр или полностью отменить его.

Документация:

DataGrid и TreeList – Экспорт и Копирование в Буфер Обмена

Часто возникают ситуации, когда необходимо выгрузить данные из контрола в один из популярных форматов. В новой версии библиотеки контролы DataGrid и TreeList поддержали экспорт в форматы XLSX и PDF, что открывает большие возможности для дальнейшей обработки данных и их печати.

Хотелось бы акцентировать внимание на сохранении конфигурации данных при экспорте в XLSX. Механизм экспорта переносит правила сортировки и группировки данных, а также форматирования значений ячеек в результирующий XLSX-документ.

article-v12-exportxlsx
Эскпорт в формат Excel

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

article-v12-exportpdf
Экспорт в PDF

При экспорте вы можете дополнительно настроить ряд параметров (например, при экспорте в PDF - формат бумаги и отступы, а при экспорте в XLSX - настройки форматирования, культуру и т.д.)

В новой версии мы также добавили метод для копирования выбранных строк в системный буфер обмена. При этом вы можете включать или исключать заголовки колонок из копирования.

Документация:

Docking UI - Переключатель Документов

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

article-v12-documentswitcher
Document Switcher

Пользователь может нажать CTRL+TAB или CTRL+SHIFT+TAB, чтобы открыть Document Switcher, и уже в нем активировать нужную панель.

Документация:

Cartesian Chart - График Lollipop

Cartesian Chart — один из больших и популярных контролов в нашей библиотеке, поддерживающий построение множества типов диаграмм – от точечных и линейных до столбчатых и "японских свечей". В новой версии добавился еще один вид диаграмм, так называемый Lollipop ("леденец"). В нем каждая точка представляется в виде вертикальной или горизонтальной линии с акцентным маркером на конце. Классические круглые маркеры действительно создают ассоциацию с леденцами.

article-v12-lollipopchart
Диаграмма Lollipop

Если стандартные маркеры вам не подходят, вы можете заменить их на любую SVG-иконку.

Документация:

Больше подробностей о новой версии библиотеки контролов вы найдете по ссылке ниже:

Демо-приложение

Лучший способ оценить библиотеку контролов — увидеть ее в действии. В нашем демо-приложении мы постарались представить все возможности библиотеки контролов EMX Controls.

article-v12-demoapp
Общий вид демо-приложения

Вы можете скачать Offline-версию приложения и запустить ее с помощью всего лишь одной команды:

Или открыть Online-версию демо-приложения в браузере:

Функциональность online-версии, к сожалению, ограничена возможностями WebAssembly.

Использование Библиотеки в Своих Проектах

Библиотека контролов Eremex Controls доступна на сайте nuget.org. Поэтому вы всегда можете ее протестировать в своих проектах. О том, как создать проект с нуля, мы написали руководство в нашей документации.

Заключение

Выход версии 1.2 — большой шаг в развитии библиотеки Eremex Controls, а ваши отзывы и комментарии помогут нам двигаться в правильном направлении. Присоединяйтесь к нашему Telegram-каналу, чтобы быть на связи с командой разработчиков, задавайте вопросы и делитесь идеями.

Команда EMX Controls

Комментарии (15)


  1. NeriaLab
    23.10.2025 02:50

    На мой личный взгляд и к моему сожалению, по визуалу, он сильно уступает ComponentOne. Давно ищу компоненты, похожие по своему функционалу на C1

    P.S.: Нашел плюсик, вкладки симпатичные,


    1. xtraroman
      23.10.2025 02:50

      Понимая что у людей разные вкусы, мы предусмотрели возможность переключения визуальных тем. На текущий момент у нас нет темы похожей на С1, но мы постараемся учесть ваше пожелание в будущих релизах.

      Так же, мы предусмотрели механизм модификации встроенных тем. Процесс модификации описан тут

      https://eremexcontrols.net/controls/themes/modify-control-themes/

      Исходники тем лежат на гитхаб

      https://github.com/Eremex/controlthemes

      Можно изменить любой визуальный аспект.


      1. NeriaLab
        23.10.2025 02:50

        Тема - это тема, это поправимо, но еще я говорю про функционал. Grid - действительно - классные в C1, как и ListView, TreeView + фильтры. Посмотрите, может возьмёте себе на заметку


        1. xtraroman
          23.10.2025 02:50

          Спасибо. Посмотрим.


  1. dephonica
    23.10.2025 02:50

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


    1. xtraroman
      23.10.2025 02:50

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


    1. Siemargl
      23.10.2025 02:50

      Да, она тормознее WPF

      А что, так бывает? о_О


      1. xtraroman
        23.10.2025 02:50

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


      1. dephonica
        23.10.2025 02:50

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

        Скрытый текст


        1. xtraroman
          23.10.2025 02:50

          Красивый UI.

          В авалонии можно свободно посмотреть детали реализации рендера,

          https://github.com/AvaloniaUI/Avalonia/blob/master/src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs

          если нашли проблему прислать им pull request и в разумные сроки получить официальный билд с исправлениями.

          Это намного удобнее чем WPF который в плане рендеринга закрыт и сейчас уже совсем не развивается.


          1. dephonica
            23.10.2025 02:50

            Спасибо.

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

            Думаю именно из-за обилия низкоуровневых хаков майки так и не смогли перенести WPF ни на одну альтернативную платформу.


            1. xtraroman
              23.10.2025 02:50

              >так и не смогли перенести WPF ни на одну альтернативную платформу.

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


              1. dephonica
                23.10.2025 02:50

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


        1. Siemargl
          23.10.2025 02:50

          а компонент графика откуда?

          симпатичный


          1. dephonica
            23.10.2025 02:50

            Компонент кастомный и реализован с чистого листа, а за красоту спасибо FabFilter - это их визуальный дизайн, который я использовал в качестве референса, расширив его функциональность. Поэтому релиза с таким UI не существует, он был только для внутреннего использования.

            Оригинал у FabFilter реализован на Qt и немного немного динамичнее, но и мой WPF вариант получился вполне себе гладким в плане ощущений от использования (очень старое видео, PC CPU CoreQuad 2008 года производства, GeForce 640):

            Скрытый текст