• Как поменять цвет заднего фона у активного TabItem?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Все логично.
    Вы же не поменяли цвет состояний (over select и пр...)

    WPF не про смену цвета элемента через базовые свойства элемента.
    WPF это про стили и язык разметки интерфейса (XAML)

    В базовом виде стили выглядят как-то так:
    (можете просто скопировать всё на любую форму в проекте и заработает)

    <Grid>
            <Grid.Resources>
                <ResourceDictionary>
                    <Style  TargetType="{x:Type TabItem}">
                        <Setter Property="OverridesDefaultStyle" Value="True"/>
                        <Setter Property="SnapsToDevicePixels" Value="True"/>
                        <Setter Property="Foreground" Value="White"/>
                        <Setter Property="Background" Value="#FF7C0000"/>
                        <Setter Property="BorderBrush" Value="Black"/>
                        <Setter Property="Height" Value="32"/>
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type TabItem}">
                                    <Border x:Name="Border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1" Margin="0,0,-1,0">
                                        <Grid >
                                            <Rectangle x:Name="interactive" Opacity="0.3"/>
                                            <ContentPresenter HorizontalAlignment="Center" Margin="12,2,12,2" x:Name="ContentSite" VerticalAlignment="Center" RecognizesAccessKey="True" ContentSource="Header" />
                                        </Grid>
                                    </Border>
                                    <ControlTemplate.Triggers>
                                        <Trigger Property="IsSelected" Value="True">
                                            <Setter Property="Panel.ZIndex" Value="100"/>
                                            <Setter Property="Background" Value="Black" />
                                        </Trigger>
                                        <MultiTrigger>
                                            <MultiTrigger.Conditions>
                                                <Condition Property="IsMouseOver" Value="True"/>
                                                <Condition Property="Selector.IsSelected" Value="False"/>
                                            </MultiTrigger.Conditions>
                                            <Setter Property="Fill" Value="Black" TargetName="interactive"/>
                                        </MultiTrigger>
                                        <Trigger Property="IsEnabled" Value="False">
                                            <Setter Property="Opacity" Value="0.5" TargetName="interactive" />
                                            <Setter Property="Fill" Value="Black" TargetName="interactive" />
                                            <Setter Property="Background" Value="White"/>
                                            <Setter Property="Foreground" Value="DarkGray"/>
                                        </Trigger>
                                    </ControlTemplate.Triggers>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                    <Style TargetType="{x:Type TabControl}">
                        <Setter Property="Background" Value="Black"/>
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type TabControl}">
                                    <Grid KeyboardNavigation.TabNavigation="Local">
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="Auto"/>
                                            <RowDefinition Height="*"/>
                                        </Grid.RowDefinitions>
                                        <TabPanel Grid.Row="0" IsItemsHost="True" Panel.ZIndex="1" KeyboardNavigation.TabIndex="1"/>
                                        <Border Padding="12" Background="{TemplateBinding Background}"
                                                    Grid.Row="1"  KeyboardNavigation.DirectionalNavigation="Contained" KeyboardNavigation.TabNavigation="Local" KeyboardNavigation.TabIndex="2">
                                            <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent"/>
                                        </Border>
                                    </Grid>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </ResourceDictionary>
            </Grid.Resources>
            
            <TabControl Margin="10" >
                <TabItem Header="Файловая система">
                        <TextBlock>Вкладка 1</TextBlock>
                </TabItem>
                <TabItem Header="Еще одна система">
                        <TextBlock> Вкладка 2</TextBlock>
                </TabItem>
                <TabItem Header="Мегасистема">
                        <TextBlock> Вкладка 3</TextBlock>
                </TabItem>
                <TabItem Header="Суперсистема" IsEnabled="False">
                        <TextBlock> Вкладка в дисабле</TextBlock>
                </TabItem>
            </TabControl>
        </Grid>


    В данном примере я определил стили внутри Grid
    Это значит все таб-контролы внутри этого грида будут использовать этот внешний вид.
    Можно так же определить стиль на уровне окна или на уровне приложения (в App.xaml)
    Можно именовать стили (без имени = по умолчанию)

    Выглядит живьем все вот так:
    cuzfqh6sokmhzyh2opaumtxfpa8.png

    Соответственно после того как стиль есть, уже можно переопределить в нем базовые свойства как надо через Setter'ы

    Данная строка задает переопределение всех свойств базового стиля (ну или можно их все вручную переписать):
    <Setter Property="OverridesDefaultStyle" Value="True"/>


    А это чтобы по пикселям выровнять:
    <Setter Property="SnapsToDevicePixels" Value="True"/>


    Таким способом можно связывать отдельный компонент внутри стиля с базовым свойством:
    Background="{TemplateBinding Background}"

    А этот компонент я добавил как пример :
    <Rectangle x:Name="interactive" Opacity="0.3"/>
    Показать что интерактивные состояния можно как угодно реализовывать и что структура компонента может быть различной. (где -то у загажнике у меня валяется Tab-Control в виде круга (как у железного человека прям с радиальной расстановкой tabItem'ов)

    с помощью Trigger'ов можно делать ракцию изменений свойств.
    Также специально сделал Овер мыши через мультитриггер, для понимания как такие использовать.
    Можно сюда еще анимации добавлять.
    А можно вообще без тригеров через VisualState добавлять интерактив, принципы схожи.

    Грамотное применение стилей дает возможность не перегружать верстку страниц, визуал, отсупы, сетка все автоматом подтаскивается, что видно в самом конце кода, сами табы оформлены по минималу
    Ответ написан
  • Как реализовать LazyLoad у TreeView?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Чем пример с MSDN не устроил ?
    https://docs.microsoft.com/ru-ru/dotnet/framework/...

    Есть момент - при наличии некоторых условий виртуализация отключается:
    - если контейнеры элементов добавляются напрямую к элементу управления ItemsControl.
    - если объект ItemsControl содержит контейнеры элементов различных типов.
    - если для прикрепленного свойства VirtualizingStackPanel.IsVirtualizing установлено значение false
    - если для прикрепленного свойства ScrollViewer.CanContentScroll установлено значение false

    Можно еще взять любой пакет контролов где это реализовано (например Telerik)
    Подсмотреть в их исходниках реализацию виртуализации и сделать свою в преферансом и дамами.
    Ответ написан
    Комментировать
  • Дизайн Windows Forms C#?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Объясню на пальцах
    1) Windows Forms родились во времена Windows 95 когда над дизайном окон в windows думали единицы.
    Внедрение возможно, но это сродни пыткам и БДСМ, а какой-нибудь material Style вообще могут единицы на нем сделать, хотя в итоге выглядеть будет все равно как китайская подделка (присмотритесь к кривизне материал у телерика на формах в сравнении с андроидом, поймете о чем я)
    2) MDI контейнер не используется с 2003го. (как вышел .net), вместо него сейчас более перспективные Docking либо tab-компоновка (см любой браузер) либо Ribbon.
    Есть конечно исключения, например в Photoshop можно включить что-то вроде MDI режима, но это очень специфичные кейсы использования.

    Уже только 2 этих фактора лишают вас каких либо современных методов/библиотек для интеграции кастомных дизайнов в проект

    3) WPF.
    Почему вы видите информацию в разрезе десктопного дизайна только про него.
    Ну потому что, там оптимальное соотношение цена/время/качество в интеграции.
    Можно сделать почти все что угодно, но для хардкора нужен большой скилл (как и везде впрочем)
    Примеры можно посмотреть у меня https://inediapps.com/portfolio/
    В будущем рекомендую переходить на данную платформу, хотя некоторые олдфаги могут тут со мной поспорить. Насчет актуальности - он быстрее форм, его Microsoft сейчас активно поддерживает, он opensource, поддержка тача и hiDPI, перспектива кроссплатформенности (Avalonia, Unity3D, Xamarin+.net5 …)

    Вывод.
    Понять, простить и забыть о дизайне MDI + WinForm.
    Ответ написан
    Комментировать
  • Хороший дизайн, сочетания цветов?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Вы всерьез думаете что люди будут ходить на ваш сайт из-за цветовой гаммы?
    1) Контент. Без него все остальное бессмысленно
    2) UX дизайн или Юзабилити (навигация, компоновка, логичность, понятность) Если пользователь заблудился на сайте, его не успокоить пастельной цветовой гаммой.
    3) UI дизайн, и тут вовсе не цвета на первом месте. На пару порядков важнее например типографика.
    цветовая гамма вообще никак на посещения не влияет, все субъективно. Я например люблю яркий оранжевый. 13-тилетним девочкам нравится розовый и т.д.
    Т.е. еще более важно это ориентация на ЦА.
    Если 12-тилетняя девочка зашла к вам на сайт чтобы посмотреть на Пони, то если у вас лучшие мини-лошадки в мире ей по большому счету будет все-равно на цвета блоков, т.к. она тут не за этим. Как и ровно побоку ей будут цвета, если ваши пони - полное говно, красивая цветовая гамма, да и остальной дизайн ее тут не задержат ни на секунду.
    Ответ написан
    5 комментариев
  • Почему не отображается картинка в Image WPF?

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

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

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

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Примеры дизайна современных десктопных интерфейсов

    Стилистика Word 2016-2019 довольно хороша, многие ее используют.
    Посмотрите как сделана Visual studio 2019 и Visual studio code.
    Последний Фотошоп неплох, но смущает, что все иконки одноцветные, прямо даже бесит, взгляду незачто зацепится.
    AdobeXD как вариант офисного оформления.
    Посмотрите на UI Blender под Linux там довольно интересная реализация многопанельного интерфейса.

    Иконки располагать наверх

    Совсем не обязательно, можно боковое меню применить. В т.ч. и в сложных UI.
    Вот вам пример из нашего портфолио с такой компоновкой
    https://inediapps.com/portfolio/hyterus.html
    Работа не дооформлена еще, только 1й этап дизайна, но концепт понятен.

    в UWP на виндоус 10 теперь некий дэшборд-подобный дизайн приветствувается

    Последняя сборка XAML Controls Galery (можно из маркета скачать) дает понимание как MS видит будущее UWP скромно, но что-то подчерпнуть от туда можно.
    Не смотрите на демки от Telerik хуже UI для UWP и WPF придумать сложно в 2019м. Хотя нет, посмотрите, чтобы иметь представление. Telerik для WPF я люблю, но мы его полностью перестилизовываем (в примере hyterus выше что я дал, он использован для карт, графиков, таблиц, ввода дат, поиска и т.п.)

    какие ограничения есть у wpf, поддерживает ли он винду младше вин7

    Поддерживает. Но придется забыть о всех новых фичах WPF и использовать старые версии фреймворка.
    Ограничений у WPF почти нет, самая здравая платформа под Windows сейчас, но UWP - на несколько порядков производительнее. Подкупает. Мой канал на ютубе https://www.youtube.com/channel/UC5_nTfdwyiNFR5200...
    там несколько UWP приложений, суперсложные UI (анимированные, игровые). WPF такое и не снилось, все банально зависнет на анимациях.

    насколько сложно из винформ перекодировать в wpf или uwp

    Сложно. Код придется переписать почти полностью. Винформ слишком устарел морально на мой взгляд. Но очень хорош для каких-то системных вещей.
    С wpf на uwp портировать тоже не так просто, 50-90% переписать (если, конечно, хочется использовать новый WinAPI) XAML там так же сильно различен, процентов 80 UI заново перекодировать приходилось.
    Ответ написан
    1 комментарий
  • Как добавить множество (больше тысячи) объектов к WrapPanel (WPF)?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Во первых: не использовать wrappanel.
    Для подобной цели лучше canvas, но скорее всего более производительным будет написать свою панель компоновки. тут главное правило - как можно реже перерисовывать позиции элементов.
    https://docs.microsoft.com/ru-ru/dotnet/framework/...
    Далее сам объект, опять же наверняка вам не нужны все фичи класса Shapes, и судя по скрину все элементы одноразмерны. производительнее будет создать новый элемент основываясь на базовом frameworkelement с заданным набором свойств (цвет из enum и размер)
    Кстати элемент Border производительнее чем элемент Rectangle, не знаю с чем это связанно, но это вовсе не очевидно, основываясь на логике должно быть наоборот, но практика показывает иное. Попробуйте сами вывести N тысяч бордеров против Rectangle замерив производительность.

    Если элементы не всегда выводятся полностью на экран а со скроллом, то тут сразу виртуализация (отрисовывать только то что видимо).
    Далее добавление. элементов в панель.
    Советую просто хакнуть систему, добавляя не по одному, а срузу сотню-другую, или если количество элементов заранее известно - сразу сформировать их все (коллекцию прибиндить) на этапе загрузки. Просто сделать их невидимыми в цвет фона, далее просто меняя состояние нужного элемента на нужный цвет по индексу во время процесса (если таковой имеется) Работа с коллекциями производительнее чем всякие For c Children.Add.
    Скорее всего описанный мной вариант, значительно ускорит процесс, но пожрет уйму оперативной памяти и процессорного времени, тут решение только одно - растеризовать!
    Можно залить все элементы или же часть просто текстурой (например разбить на квадраты или полоски область карты)
    Алгоритм тут прост - рисуете элементы (лучше часть) - "фотографируете" - получившийся Image - вставляете на нужную область
    Вообще чистый хардкор это именно формировать квадраты не элементами а группой изображений.
    Это на несколько порядков снизит затраты на отрисовку, но писать такой код сможет не каждый, в особенности если квадраты не статичны (меняют состояние цвета) во время выполнения или требуется интерактив (тултип или клик по квадрату например), но всё возможно, мы даже растеризацией анимации делали, самое сложное это алгоритм корректный разработать.
    Самый простой, который приходит на ум - отрисовывать всю область как текстуру, на Canvas в нужное место выводить поверх 10-100 новых элементов, после чего рстеризовать всю область с новыми элементами в общую текстуру удалив эти элементы и рисуя новую партию. В итоге вообще получится просто image который ничего не весит и не ест процессор.
    Так же я бы поизучал исходные коды к примеру Telerik, у них много подобных контролов с выводом миллионов объектов. (например точки на графиках).
    Ответ написан
  • Почему wpf mousemove не срабатывает?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Все верно, так и должно работать, это стандартное взаимодействие компонентов не только в WPF.
    После mousedown на кнопке мышь считается принадлежащей этому объекту, поэтому остальной UI на нее не реагирует.
    Конкретно для вашей задачи под drug-drop есть событие Drag Over - реакция на зажатую кнопку мыши тянущую объект drug над другим объектом (исключение из описанной выше ситуации). Обычно реакция делается, чтобы пользователь понимал куда можно "дропнуть" объект а куда нельзя, но ее можно использовать и в других кейсах.
    Ответ написан
    Комментировать
  • Как заставить заработать триггеры в ListViewItem?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Потому что в DataTemplate вы создали еще один ListViewItem (вместо контента первого)
    В общем дереве объектов у вас получился ListViewItem вложенный в ListViewItem неудивительно что все сломалось.
    (DataTemplate создается для ContentPresenter в стиле)

    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    Ответ написан
    1 комментарий
  • Как дебажить 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...
    Ответ написан
    Комментировать
  • Как создавать свои контролы и анимации в UWP WPF?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Фантазия и хардкор.
    Я не шучу, без фантазии и "hilevel математики + код + знание платформы" что-то кроме стандартных анимаций (вроде сдвига/поворота/прозрачности) сделать сложно будет.

    * Жалюзи можно сделать, например, используя маски прозрачности в WPF. (70% фантазии и 30% простого кода)
    * А можно написать код шейдера специально растеризующего изображение "жалюзями" (100% хардкодинга)
    вообще примеры с графическими шейдерами есть в сети.
    * Можно просто "хакнуть" систему сделав Path- фигуру которая будет жалюзями задав ей цвет фона и при достаточно быстрой анимации(используя чистый XAML) пользователю будет не заметен обман (100% фантазии)
    * Можно написать математически верный алгоритм на чистом C# используя несколько блоков Image в XAML показывающих часть изображения сдвинутого в определённых пропорциях в сумме составляющих анимацию жалюзи (50/50)
    * Посмотрите примеры от MS, у них на C# написаны всяческие летающие шарики и салютики для анимаций только кодом еще для древнего 3,5 фреймворка, код будет работать и под UWP
    Ответ написан
    Комментировать
  • WPF Toolkit не отображается в визуальном дизайнере?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Никак.
    Точнее можно попытаться, но вообще нужно смирится с тем что визуальный редактор XAML в студии часто глючит, тормозит и иногда отображает неверно результат.
    Через годик практики визуальный редактор уже скорее мешает, смотря на код уже видно что и как.

    Как можно попытаться починить
    1) верный подход это использовать Blend for Visual Studio, там редактор поустойчивее + есть дополнительные панельки для стейтов анимаций и прочих плюх, вобщем студия для C# бленд для XAML
    2) иногда помогает перекомпилировать проект, сделав перед этим очистку (Clean Progect)
    3) установка свойств d:DesignHeight d:DesignWidth и остальных "d:"помогают редактору реже падать
    4) если при создании контрола было не учтено создателем DesignView, то как правило редактор просто падает.
    xceed те еще говнокодеры, и врят ли у них учтен визуальный редактор в коде контролов, глюки - неизбежны.
    из пакетов лучше всех с этим у Telerik, хотя тоже раз на раз.
    5) чем выше версия студии тем стабильнее редактор, это факт.
    6) чем больше размер проекта тем чаще падает и больше тормозит редактор - тоже факт, поэтому мы его просто отключаем например.

    А теперь секрет, как можно на самом деле делать XAML вкусно и с удовольствием
    Написав кусок XAML кода поздоровее запускаете проект без дебагера (CTRL+F5)
    Запускаете утилиту Snoop https://github.com/cplotts/snoopwpf
    И уже через нее смотрите все ли хорошо, на лету изменяя свойства и код добиваясь нужного результата - внося изменения в проект.
    Точно так же работают HTML верстальщики над сайтом, используя инстументы разработчика браузера через "F12"

    Подобная практика ускорит работу и позволит работать с реальным окном приложения как "что вижу, то и получаю".
    Ответ написан
    Комментировать
  • WPF Как избавиться от мерцания окна?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Есть несколько ошибок в коде стиля

    1) не используйте лишние бордеры создавая ненужные ветви дерева
    <!--Back border-->
                                <Border x:Name="BackBorder"
                                        Background="LightGray">
                                </Border>

    у вас выше уже был бордер чтобы сделать и рамку и фон, зачем лишние?

    2) Вы забыли самый важный элемент стиля окна - AdornerDecorator.
    Кажется что он ни на что не влияет, но на самом деле именно из-за него и происходят все глюки в него нужно обернуть ContentPresenter (а точнее весь пользовательский контент)
    Скорее всего мерцания именно из-за этого
    Вообще, если с контролом непонятные визуальные глюки, всегда советую обращаться к документации по стандартным стилям, скорее всего вы забыли какую-то важную часть кода (чаще всего какой-нибудь "PART_")
    https://docs.microsoft.com/ru-ru/dotnet/framework/...

    3) используйте привязки к свойствам окна (беграунд, бордер, толщина бордера) внутри темплейта

    4) ну и у вас как-то странно стиль применен x:Type local:MainWindow, вместо x:Type Window

    Вот пример темплейта стиля:
    <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Window}">
                        <Border x:Name="RootContainer" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                            <AdornerDecorator>
                                <DockPanel>
                                    <Border DockPanel.Dock="Top" Background="{StaticResource WindowHeaderBackgroundBrush}">
                                          <!--тут ваши стили заголовка и его элементов-->
                                    </Border>
                                    <ContentPresenter/>
                                </DockPanel>
                            </AdornerDecorator>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="WindowState" Value="Maximized">
                                <Setter TargetName="RootContainer" Property="Padding" Value="7"/>
                            </Trigger>
                            <Trigger Property="IsActive" Value="False">
                                <Setter TargetName="RootContainer" Property="BorderBrush" Value="#FF333333"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>


    Если мерцания после правок не пропадут на 7ке, значит необходимо таки добавить рамку WindowChrome (стандартная тень от окна и базовый бордер) для этой ОС,
    хотя бы вот так GlassFrameThickness="0,1,0,0"
    Либо отказаться от WindowChrome полностью (но тогда нужен какой-то кастомный контрол окна, поддерживающий все фишки Aero (например drag за заголовок и стук о край экрана), у меня раньше такой использовался, но с приходом WindowChrome свойств он стал не нужен.
    Вообще отказываться от WindowChrome тени окна я бы не рекомендовал, уж слишком лучше выглядят с ней окошки, а любое кастомное решение будет проигрывать стандартной Aero тени в производительности и неглючности.
    Ответ написан
    Комментировать
  • Готовый компонент для растягивания фигур?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Базово - нет.
    Насколько я помню такие вещи делаются через Behavior's или addonners

    Вот старый пример бихейвора с использованием библиотеки System.Windows.Interactivity
    10rem.net/blog/2010/01/09/a-wpf-behavior-for-windo...

    Вот еще более старый, но вот тут на мой взгляд, более верный подход - через кастомный контрол и Аддоннеры, можно просто достать нужные куски кода себе.
    https://www.codeproject.com/Articles/22952/WPF-Dia...

    А вот просто документация, где все необходимые знания чтобы сделать такой же, но свой с блекджеком и дамами
    https://docs.microsoft.com/en-us/dotnet/framework/...
    Ответ написан
    Комментировать
  • Как создать свой дизайн интерфейса в 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 верстальщик аналогии прямые).
    Ответ написан
    Комментировать
  • Как могли взломать скайп вместе с изменением почты которая была привязана к аккаунту?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Аналогичная ситуация, та же почта злоумышленника
    gweitzhner@gmail.com
    моя почта не взломана.
    Ответ написан