Импортозамещение-3

Продолжаем изучение возможностей обходиться без «фирменных» элементов в UWP-программках. Такие элементы иногда и вполне неплохие, но вот «фирмы» бывают разными — к примеру, могут внезапно присоединиться к санкциям против государства, в котором тебя угораздило родиться и жить. Много чего могут…
На нынешнем этапе в деле замены на open-source пришла очередь контрола RadDataGrid фирмы Telerik. Ничего плохого не могу сказать про саму фирму, но политика есть политика — рано или поздно она за тобой придёт.
В качестве кандидата на замену выступает DataGrid из пакета Windows Community Toolkit. Несомненным преимуществом контрола является его бесплатность и открытый код. Остальные его недостатки можно преодолеть путём высказывания некоторых магических слов в адрес разработчиков, сопровождаемое плотным сидением за монитором и клавиатурой. В процессе выяснилось, что отсутствие у контрола врождённой встроенной сортировки по колонкам исправляется буквально десятком строк кода. Отсутствие у колонок типа (они все там DataGridTextColumn) и параметров форматирования (типа CellContentFormat или FormatString) вполне компенсируется конвертером FormatStringConverter из того же Community Toolkit. Также на достаточно приличном уровне находится способность контрола автоматически выставлять ширину колонок. Конечно, среди отображаемых данных обязательно найдётся строка большой длины и вся табличка станет шире монитора, но программа при этом не валится.
На совершенно аховом уровне  — внешний вид контрола. Для раскраски совершенно не воспринимаются никакие «тематические» цвета наподобие {ThemeResource SystemChromeHighColor}, только константы типа White, Gray и т.п. В результате раскрасить строки в альтернативные цвета не получается, только «вырвиглаз» или смена цвета шрифта на серый (всякий другой выглядит плохо при смене темы dark/light). Про раскраску границ ячеек и всего контрола — только магические слова.
Но жить можно. Вот, собственно, результат трудов:

imageimage

UWP vs WPF

Вот такую диаграмму (9 графиков) изображает моя UWP-программка.

BlPr

Вроде всё как хочется, однако для изображения используется платный контрол по бесплатной лицензии (которую вполне могут и отозвать, как отозвали уже возможность обновлять пакет), а бесплатного с подобной функциональностью просто нет. Усугубляется дело ещё и тем, что контрол отображает графики очень медленно, с какой-то тяжёлой зависимостью от количества данных, что вызвало необходимость  в изобретении и реализации методов оптимизации всего процесса.
Похожая ситуация и с гридами для табличного представления данных, но здесь хотя бы компания Telerik даёт бесплатно попользоваться своим пакетом контролов, в котором есть не самый плохой и достаточно быстроходный грид.
А вот для WPF существует «встроенный» подходящий с первого взгляда грид, а пакетов для рисования графиков можно найти даже два, что удивительно на фоне того, что MS платформу WPF не развивает практически с самого рождения и там нет много чего из того, что есть в UWP.
Такая вот дилемма.

Импортозамещение-2

Предыдущий пост был про начало работы по замене контролов конторы SyncFusion на что-то более пристойное и, главное, поддерживаемое производителем.

Вторым шагом эпопеи стала НИР по замене контрола SfDataGrid для табличного вывода данных. Контрол с первого взгляда неплохой, до накопления в программе довольного большого количества данных (500-1000 строк в таблицах) работал сравнительно быстро. Со временем работа заметно замедлилась, а на слабых компьютерах стала и вовсе раздражать. Никакие предложенные производителем способы ускорения работы так и не помогли. Дополнительно выяснилось, что с увеличением сложности вёрстки страницы, на которой расположен контрол, отключается сортирока по столбцам, что сильно сказывается на возможности анализа данных пользователем. Да ещё и «санкции»… В общем, сильно захотелось попрощаться с контролом.

Кандидатов на замену нашлось ровно два — DataGrid из пакета Windows Community Toolkit и RadDataGrid от болгарской фирмы Telerik. Оба денег не просят и по уровню функциональности показались примерно одинаковыми, однако контрол из ToolKit’а при тестировании оказался совсем уж примитивным и из соревнований выбыл.

Болгарский RadDataGrid после приложения некоторых усилий по доведению внешнего вида до приемлемого (что-то, правда, так и не удалось сделать, но дарёному коню даже в зубы не смотрят, а тут пришлось бы сосем уж в неприличные места залезать…) был установлен на страницы программы и сборка отправлена в магазин.

Главное, функциональность (сортировка и фильтрация в колонках таблицы) контрола не отключилась
при переносе с простой страницы для тестов на сложные страницы программы. Ура,
победа!

image

image

Импортозамещение

Где-то лет пять-семь назад «американская» фирма Syncfusion предложила бесплатную пожизненную  community-лицензию на свой пакет контролов для UWP. Ну, бесплатно же, отчего бы не взять.

По ходу дела выяснилось, что не так уж у них с контролами и хорошо, как в демо-роликах. Пришлось даже поучаствовать в доработках некоторых из них — во время общения с конторой стало понятно, что фирма, скорее, индийская. В частности, поэтому стал присматриваться, чем заменить их контролы, которые использовал в своих программках. В итоге к последнему времени таких контролов оставалось три: SfDataGrid для табличного вывода данных, SfChart для отображения графиков и  SfTimePicker для выбора периода времени.

Пару недель назад «фирма» не пустила меня на свой сайт за обновлениями под предлогом, что она американская, а я – российский, а санкции… В принципе, ходить на сайт уже года два приходилось через прокси и впн, но теперь, похоже, решили забанить по профилю, в котором, вероятно, сказано про Россию. Что ж, хозяева своему слову — дали лицензию, назад забрали, хоть и комьюнити. Ну и ладно, жили как-то раньше без этой «американской» фирмы, и дальше проживём. Другие американские выручат, надеюсь.

Собственно, вот по этим причинам и решил заняться любимым делом наших вождиков, хотя они больше калякают об этом, чем делают.

Первым контролом к замене стал SfTimePicker. Очень криво сделанный и плохо работающий (только в светлой теме, на планшете пальцем проворачивать список значений — изматеришься), но единственный, который удалось приспособить для выбора и редактирования данных типа TimeSpan для интервалов времени – с часами, минутами и секундами. Было как-то странно при поисках — довольно много народу интересуется такими контролами, а к использованию никто ничего не предлагает.

Пришлось городить самому, без особых затей, но со всеми нужными свойствами. В итоге получился контрол, отображающий промежуток времени по заданному формату с всплывающим редактором значения. Можно использовать диапазон времени от нуля до 33 дней 23 час. 59 мин. 59 сек. Редактор, построенный на комбобоксах, работает несравненно быстрее и легче «американского», хоть и не такой «красивый”.