Ответы пользователя по тегу C#
  • 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/...
    Ответ написан
    Комментировать