• Как сделать подобные элементы в wpf?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    1способ
    Делается макет волн в SVG, например в InkScape (т.к. там есть редактор текстового кода (координат) для SVG)
    В WPF делается базовая разметка в левую часть ( где волны и пр) ставится Grid внутрь которого накидываете элементы Path. в свойство DATA которых прописываете поочередно код каждой "Волны" и пр элементов из SVG. (копируете из редактора кода SVG), далее задаете цвета, прозрачности и пр
    Предварительно в InkScape каждый элемент нужно вписать в прямоугольник который будет тех же пропорций что и в WPF, чтобы не мучатся с отступами в WPF (Просто создаются 2 точки по диагонали и объединяются с каждым элементом (чтобы у всех элементов было одинаковое начало координат)
    5f352e144839c343347930.png
    Свойство Data принимает класс Geometry(StreamGeometry) , который по внутренностям = SVG элементу по факту.

    2й способ (не рекомендую)
    Сделать все как в 1м только вместо Grid использовать Canvas (тогда не нужно вписывать все элементы в прямоугольник в InkScape, т.к. с этим могут возникнуть сложности)
    Минус способа - если захотите менять пропорции изображения (зумм) придется пихать Canvas во ViewBox, а данный элемент слишком малопроизводителен и часто дает не качественный рендер.
    3й способ
    Найдите в сети WPF контрол, который может прямо SVG отобразить.
    Минусом 3го способа является то, что например в 1м и 2м мы можем анимировать волны и делать реакции на мышь/тач без всяких проблем, в 3м чисто статика.
    Ответ написан
  • Как правильно заказывать дизайн приложения iOS?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    1) на выходе лучше просить исходник figma
    там не будет проблем самому что-то сохранить в любом нужном формате
    Как адаптировать дизайн под смартфоны?
    - Заказывайте сразу с интеграцией дизайна в ПО, если нет опыта интеграции дизайна, то скорее всего у вас получится довольно плохо. Если все же хотите делать все сами - заказывайте максимально простой дизайн основанный полностью на Guidlines iOS
    2) От каких цен можно будет отталкиваться?
    Все слишком индивидуально и зависит как от объема работ, так и от скилов дизайнера. Я, например, не берусь меньше чем за $1000 на простые проекты.
    Если не знаете как оценивать работу специалиста - не оценивайте. Просто опишите проект - оформите заказ на фриланс, Фрилансеры сами скажут сколько это будет стоить. Это на самом деле даже более правильно.
    Ответ написан
    Комментировать
  • Как и где можно пройти практику Web Design?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Верно ли я понимаю, что вы думаете, что после курсов вам дадут реальные задачи, запоров которые вы сорвете сроки проекта?
    Практика же подразумевает именно реальные задачи в реальном времени.
    Сделайте пару работ в портфолио, просто адаптируйте дизайн чего-то существующего. Не берите гугл, Фейсбук и пр. заезжено. Возьмите какой-нибудь дискорд, систему управления какую-нибудь, что-то сложнее лендинга.
    Если работодатели увидят, что вы действительно что-то можете дизайнить, а не просто слушать/смотреть курсы - вам предложат практику (естественно бесплатно, но, как правило, если человек справляется с первым заданием на отлично - берут на нижнюю планку ЗП сразу)
    Т.е. сделайте что-то сами для начала, т.к. в противном случае вам предложат только такую-же абстрактную в вакууме задачу, которую вы сами в силах себе придумать (если вы не в силах, что-то придумать и сделать самостоятельно - сорян, вам не место в творческих профессиях).
    PS/ и да, оформить портфолио себе любимому. Сайт портфолио свой - уже сам по себе практическая задача.
    Ответ написан
    Комментировать
  • Как присвоить тег другому тегу?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    1) Image в Rectangle вставить нельзя. Можно вставить Image в Border, т.к Rectangle не имеет внутреннего "тега" Content presenter в темплейте.
    - то что Image будет находится внутри Border - абсолютно нормальная практика, элемент Border именно для этого и предназначен
    2) Можно использовать Image Brush и тем самым вообще отказаться от элемента Image, но чтобы понять какой подход использовать, нужно смотреть на задачу которую вы решаете.
    3) Вам явно нужно подучить WPF и XAML вы оперируете неверными понятиями.
    Глядя на ваш вопрос создается уверенное впечатление, что вы вообще не понимаете, что делаете.
    - это не теги, это элементы каждый для совершенно разных целей.
    - визуальное дерево строится по принципу не "мне хочется", а по определенным требованиям под задачу
    - Контрол, темплейт, стиль, свойства - вам нужно понять что это такое и зачем, это базовые понятия в XAML.
    Книга Мэтью Макдональда "WPF: Windows Presentation Foundation в .NET 4.5" ответит на эти и многие другие вопросы
    Ответ написан
    Комментировать
  • Почему не выводятся изображения в ListBox?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Потому что в темплейте элемента списка ListBoxItem базово стоит TextBlock,
    а он, естественно, не умет рисовать битмапы.
    Просто сформируйте свой дата-темплейт для элемента списка.
    Ну и как бы, первый же запрос в гугл дает десяток решений:
    https://stackoverflow.com/questions/2081900/wpf-ad...
    https://ru.stackoverflow.com/questions/487722/Изоб...
    Ответ написан
    1 комментарий
  • Как отобразить вложенный datagrid в rowdetails внешнего datagrid?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    То что вы делаете - плохая практика, вы полностью убьете виртуализацию и это месиво из тяжелых контролов друг в друге будет тормозить, если данных много.
    Простое правило - 2 датагрида на вьюху - предел.(в т.ч. и по юзабилити)
    Все же RowDetails немного для другого предназначен, вывести какую-то строчку поясняющего текста, описание, статусы, не более.
    Не совсем понятно что именно вы хотите, но вроде бы вот решение вашей задачи:
    https://docs.microsoft.com/ru-ru/dotnet/framework/...

    Если хотите коллекцию в коллекции и раскрывать по клику,
    Возьмите какой-нибудь более продвинутрый грид с группировкой.
    Или вот руководство как это сделать на стандартных элементах
    https://docs.microsoft.com/ru-ru/dotnet/framework/...
    Ответ написан
    Комментировать
  • Как убрать стандартное свечение у окна программы в WPF?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    За рамку стандартных окон отвечает ОС, а не WPF,
    но её можно изменить или убрать, читайте тут:
    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    Ответ написан
    1 комментарий
  • Курсы по wpf от ITVDN хорошие?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Что ж вы, молодёжь, гонитесь за" видосиками"-то все время.

    1) WPF: Windows Presentation Foundation в .NET 4.5 с примерами на C# 5.0 для профессионалов
    за авторством Мэтью Мак-Дональда
    (Ничего лучше для старта на WPF не придумано)
    2) CLR via C#. Программирование на платформе Microsoft.NET Framework 4.5 на языке C#
    Автор Рихтер Джеффри
    (а это уже для общего более глубокого понимания всей .net платформы).

    Просмотр видео же дольше занимает времени чем чтение (т.к. в книгах легко пропускать "воду", которой там как правило в разы меньше).

    Ну и конечно же документация.
    В официальной документации вообще есть ответы на любые ваши вопросы в 99% случаев.
    https://docs.microsoft.com/ru-ru/visualstudio/desi...
    Ответ написан
    1 комментарий
  • В каких случая используют иконку с двумя треугольниками (для выпадающих списков)?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    В данном, конкретном случае Яндекс просто ошибся.
    Какой-то дизайнер яндекса очень любит свой Mac и считает его UI эталоном.
    Вот и нарисовал как там, На маках это от части продиктовано тем что значение не редактируемого можно переключить стрелками up и down. Это так же можно объяснить и тем что список там открывается чуть хитрее (позиционируясь на выделенном) и не всегда вниз.
    В редактируемых списках там так же 1 треугольник.
    Но в остальном мире 2 треугольника делают на Num UP/down элементе, т.к. в зависимости от того по какому треугольничку клик - увеличится или уменьшится значение. На выпадающих списках (любых) просто треугольник (или галочку) во избежании путаниц.
    на всякий случай прикрепляю скрин с UI на маках (старый, но не имеет особого значения)
    pi9hwdt-lpgqv-csdudcncts8j0.jpeg
    Ответ написан
    2 комментария
  • Где взять исходники для аниме сайта?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Обычно художников нанимают для такого, без художников....можно попробовать поискать на стоках наверное и купить там, но не думаю что что-то найдется.
    BD_ l3ftoverZ! все что в гугле - под авторскими правами же, хотите клиента у человека (а => и человека) под возможное следствие пустить?).
    Ответ написан
    4 комментария
  • Не удалось разрешить ресурс "ApplicationPageBackgroundThemeBrush"?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    1) Поставить IDE с нормальным языком интерфейса (английским)
    уже на этом этапе ошибки начнут гуглится и скорее всего вы найдете решение самостоятельно.
    2) Давать больше информации о том что вы пытаетесь сделать и как, все ясновидящие в летних отпусках.
    Потому что ответ на ваш вопрос в текущем виде:
    -Ошибка говорит о том что не удалось разрешить ресурс. Исправить - дать возможность его разрешить.
    Ответ написан
    Комментировать
  • Как достать все элементы из wrappanel?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Присвойте ресурс Background или стиль элементу ссылающийся на Background
    далее просто меняйте когда нужно цвет у ресурса
    Примерный код:

    App.xaml
    <Color x:Key="DecorateColor">#FF005087</Color>
    <SolidColorBrush x:Key="BackgroundBrush" Color="{DynamicResource DecorateColor}"/>


    элементы где меняем цвет, например внутри стиля
    <Border Background="{StaticResource BackgroundBrush}"/>


    изменение цвета ресурса
    Color decorateColor = Color.Color.FromArgb(255, 136, 0, 255);
    Application.Current.Resources["DecorateColor"] = decorateColor;


    Если использовать MVVM, то можно и через StaticResource решить.

    Но это подход "В лоб", более верным будет через состояние стиля, но это вам сначала изучить Trigger (для конкретно этого случая DataTrigger) и MVVM.
    Ответ написан
    Комментировать
  • Если ли .NET библиотека для конвертирования картинок из формата XAML Resource в обычные картинки png или jpg и обратно?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    есть такая возможность из коробки
    RenderTargetBitmap
    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    любой XAML в Bitmap преобразовывает, только сохранить как картинку вам останется
    Ответ написан
    Комментировать
  • Как сделать event в wpf асинхронным?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Стандартные методы не подошли?
    https://docs.microsoft.com/ru-ru/dotnet/csharp/pro...
    Ответ написан
    Комментировать
  • Есть программа, но на чем написана и какие библиотеки использованы?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Недавно от них была статья
    https://habr.com/ru/company/utex/blog/443300/

    Это WPF + C#, возможно с использованием Telerik
    Ответ написан
    Комментировать
  • GUI для C++. Как можно?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Под какую платформу?
    Это собственно главный вопрос. Выбор языка сегодня вторичен.
    Кроссплатформенность сегодня это миф, так или иначе вы будете либо идти на компромиссы (часто жестко), или мучатся с каждой ОС по отдельности по факту используя пару десятков общих классов которые вам и в обычном (не кроссплатформенном режиме) никто не мешает собрать под все платформы в отдельный ресурс с той же скоростью.
    Выбор платформы
    * Если windows ничего не мешает использовать UWP / WPF
    * MFC -вы серьезно хотите писать ПО на библиотеках 92го года? да они поддерживаются, но новое что-то писать на этом разве что ради фана, либо что-то специфичное под старые win системы.
    * CEF - не сталкивался, но думаю мало что хорошего в идее использовать браузерный GUI и плюсы. (если не для браузера пишите)
    * QT, сложный вопрос, есть его ярые поклонники не признающие ничего кроме, но я к нему нейтрален, считаю его устаревшим, хотя для встравиваемых систем и под линукс - да, т.к. практически нет альтернатив часто. Под эти платформы я бы выбрал qt только потому что на нее много информации в интернетах и сообщество имеется.
    * под мобильные платформы... все довольно сложно, решений вроде как есть, но я бы сегодня использовал для GUI что-то другое(Например Flutter), а c++ для отдельных модулей ибо - замучаетесь отлаживать.
    * Если GUI хочется сложный и необычный/игровой да еще и кроссплатформенно Я бы использовал необычное сочетание UnrealEngine + NoesisGUI, где Unreal решит все проблемы с платформами и производительностью Noesis с разметкой UI. Но придется пожертвовать почти всеми системными функциями на каждый чих делая кастомное решение.

    Важные моменты
    - Графическая библиотека должна использовать железо на максимум.
    т.е. без апаратного ускорения и отрисовкой видеокартой можно выбрасывать все ваши красивости на помойку.
    Наверное часто замечали что над GUI постарались, но забыли про производительность.
    Если под win попробуйте UWP, он супершустр, если честно быстрее и качественнее него в отрисовке GUI ничего не встречал. Съедает любую сложность GUI при верном подходе для любого устройства ввода-вывода (клавитура/мышь, тач на 20 касаний, сенсорные перья, VR…) Какой-нибудь QT возможности даже и не снятся, хотя вторая много старше.
    К сожалению платформа не популярна. Есть небольшая, но вероятность, что сдохнет, т.к. windows маркет не развился. Хотя недавно добавили возможность писать ПО и для обычного десктопа минуя распространение через магазин, но пока все сырое. ну и так же MS выкладывает все потихоньку в openSource это радует.
    Хотите стабильности от жизни - берите QT, лет 10 еще точно актуальна будет. Хотите простоты и скорости разработки, UI посовременнее и посложнее - что-то из нового.

    - Второй момент, после производительности. Графическая библиотека сегодня - это совместимость с "современным дизайном" .
    Что я имею ввиду: когда дизайнер вам дает исходник в Figma/Sketch, иконки в SVG видео в h264 и пр. и вам нужно рассмотреть использование этого всего на устройствах 96-300 dpi где все будет адаптивно и подстраиватся под размеры и ориентацию экрана. Вы не должны испытывать боль заднего прохода. Берете и делаете, т.к. у вас есть для этого инструменты.
    Наверное видели супермелкоту в windows программах когда DPI экрана под 300, это как раз MFC, QT и подобные
    Про линукс на FullHD планшете 8" это отдельная большая тема беседы. Хотя вроде как в последних сборках имеется поддержка hiDPI устройств.
    Тоже самое под мобильные платформы. из-за разнородицы dpi я как раз и рекомендовал использовать что-то вроде Flutter, т.к. он создан для таких устройств, в отличии от многих библиотек допиленных, созданных еще для PC в лохматые года, через костыли говна и палки пытающихся как-то с грехом пополам отрисовать несвойственную ей среду, по пути теряя все преимущества производительности плюсов.
    Хотя, справедливости ради, я видел С++ решения которые на мобилках летают суперски, но это уже вопрос профессионализма, крутой барабанщик и на кастрюлях сыграет много лучше новичка, но учится лучше на хорошем и заточенном инструменте.
    Ответ написан
    8 комментариев
  • Как оптимизировать рисование линий в WPF?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    От нескольких тысяч все что угодно будет тормозить
    Направление указали уже вам, дополню:
    Чтобы не скушать всю оперативу и проц
    читайте про BitmapCache
    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    и RenderTargetBitmap
    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    в UWP кеширование на более верхнем уровне реализовано, там попроще, но в WPF тоже можно сделать хорошо.
    Алгоритм вкратце:
    2 слоя - верхний -там где тыкаете мышкой
    и нижний - кеш
    Добавили линию (на верхнем слое) - рендерите в картинку (верх+низ) - отрисовываете эту картинку на нижнем слое (например через ImageBrush), линию на верхнем удаляете.
    Т.е. как только пользователь закончил фигуру/действие - кешируете.
    Если нужен интерактив на уже нарисованном (например узлы точек подсвечивать), тут сложнее, но тоже возможно (запоминать коодридинаты узлов и при нахождении там мыши - создавать Xaml объект.)
    С интерактивом в подобных алгоритмах как правило много математики.

    Т.е. у вас в оперативной памяти всегда 1 картинка + сколько-то объектов - полилиний.

    К слову, через кеширование кроме рисования можно делать довольно производительные анимации, производительный зумминг, производительный скролл…

    Есть еще вариант: реализовать рисование на DirectX на C++ и поместить контрол. Более нативно и производительнее.

    P/S
    свойсвто IsHitTestVisible
    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    позволяет не реагировать объекту на мышь (т.е. отключает интерактив) это полезно для объектов фона, сильно бустит производительность.
    (т.к. по умолчанию WPF определяет все события интерактива на всех объектах, а их может быть бесчисленное множество, и далеко не на всех нужно иметь реакцию на нажатие/OnMouseMove)
    Ответ написан
    Комментировать
  • Какие аргументы для клиента при обновлении сайта (редизайн)?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Важна цель редизайна, а не типографика, структура и прочее.
    Если вы четко обозначите клиенту например:
    - Я могу сделать дизайн так, чтобы в службу поддержки приходило вдвое меньше звонков
    - Я могу сэкономить вам на том-то - том-то порядка 1 млн в год перерисовав вот тут и вот тут.
    - Вот эта фича позволит утереть нос вашему основному клиенту
    и пр.
    Тогда ваши услуги купят сразу, а так просто не понимают чего вы хотите от них и что они получат (в цифрах в итоге)
    Определите цель дизайна ясно и четко с позиции бизнеса (а не дизайнера)
    Ответ написан
    Комментировать
  • Почему программа не находит ресурс?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    вот
    Uri uri = new Uri("pack://application:,,,/img1.jpg");

    На внимательность )
    Ответ написан
  • Почему во всех паттернах дизайна оставляют отступ между границей списка и первым пунктом списка?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    - Дать немного воздуха, т.к. списки - просто белый фон с текстом, без него получается визуально прижато к краю сильно из-за того что элементы как правило довольно большие по высоте (под сенсор)

    - Такой подход решает проблемы со скруглениями элементов на интерактиве если сам попап списка закруглен, поэтому иногда отступают чтобы не мучатся с версткой.
    Ответ написан
    Комментировать