Ответы пользователя по тегу .NET
  • Как оптимизировать рисование линий в 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)
    Ответ написан
    Комментировать
  • Почему не отображается картинка в Image WPF?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Гуглите WPF URI
    https://docs.microsoft.com/en-us/dotnet/framework/...

    А, да, .gif файл
    Для него лучше поискать компонент отображения. не умеет gif анимации проигрывать.
    Но в сети много примеров.
    Ответ написан
    2 комментария
  • Как дебажить XAML?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    XAML - это язык разметки UI приложения. Не более. Там нет никакого исполнения кода, просто шаблон. Статика, Нельзя поставить точку останова.
    хотя XAML это тот же XML, а значит любой отладчик xml (если таковые существуют) применим.

    WPF подразумевает собой модель MVVM (XAML - слой View в MVVM)
    Если верно архитектуру проекта спроектировать то дебажить придется только ViewModel.

    А для облегчения жизни можно использовать Resharper или что-то подобное, облегчающее написание XAML кода.
    Ответ написан
    Комментировать
  • Как сделать чтобы фигура не вылазила за рамку при трансформациях?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Или можно просто установить у бордера свойство обрезки контента
    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    Ответ написан
    Комментировать
  • Как создать свой дизайн интерфейса в WPF?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Дополню Foggy Finder
    1) напрямую использовать элементы Фотошопа (как и другого редактора) - зло. так или иначе работы по дизайну WPF строятся в 3 этапа
    а) дизайн (картинки)
    б) верстка дизайна в XAML
    в) код контролов, анимации интерактив привязка интерфейса к данным(C#+XAML)

    Кроме того Фотошоп это растр, а WPF это вектор.
    отсюда ответ на вопрос 2
    2) именно для дизайна UI под дальнейшую интеграцию в XAML мы остановились на Inkscape
    т.к.
    а) его методы рендеринга почти совпадают с direct2D что использует WPF (это очень касается шрифтов, а то в Фотошопе можно такого со шрифтами понаделать, чего в WPF потом будет повторить очень трудоемко)
    б) у него есть XML-эдитор который позволяет взять любой векторный объект и вставить его в XAML код как есть (иконки например) т.к. формат Path в WPF это по сути тот же SVG
    в) в Inkscape невозможно нарисовать то, чего нельзя сделать в WPF т.е. получается на выходе после верстки почти 1:1
    3) Metro - просто стиль дизайна, нет каких-то особых приложений WPF. НО есть UWP, это уже немного другое, хотя схожа платформа с WPF, точнее будет сказать это ее эволюция.

    По итогу:
    Дизайн WPF приложения нельзя создать без дизайнера (капитанство но факт)
    Даже если использовать готовый UI-kit (что в реальных проектах почти не применимо), то вам нужен верстальщик (аналогия c HTML+CSS версткой) который реализует верстку элементов и форм.
    Если хотите разобраться с версткой сами - сначала надо освоить сам WPF и , что еще важнее C#
    Выше посоветовали книгу М. Макдональда - Я так же начинал с неё.
    Но вот XAML и стилизацию, придется освоить самостоятельно уже после, т.к. это чуть уровнем выше (мало знать XAML, надо разбираться во всех тонкостях, чтобы не накосячить) и литературы по этому вопросу нет.
    Что важно! Без дизайнерской жилки и тяги к интерфейсам, а так же понимания анимаций, графического дерева элементов, гайдлайнов и еще массы всего сопутствующего - ничего не получится, говорю как не раз пытавшийся обучить этому ремеслу обычных программистов. По факту это отдельная профессия (как и html верстальщик аналогии прямые).
    Ответ написан
    Комментировать