Как предотвратить анимацию меню в WPF? - PullRequest
2 голосов
/ 26 июня 2010

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

Меню и ContextMenus в WPF имеют "раскрывающие" анимации, связанные с ними. Мы хотим устранить их, не вмешиваясь в системные настройки. Мне удалось вытащить шаблон с помощью Blend, но там нет ничего об анимации. Должен ли он наследовать это откуда-то?

Может кто-нибудь помочь? Любые идеи будут оценены.

Ответы [ 2 ]

4 голосов
/ 01 июля 2010

Короче говоря, дециклон прав; это исходит от ОС, но вот почему:

Шаблон по умолчанию для MenuItem содержит разметку и логику для отображения подменю. Посмотри туда.

Когда я открыл копию шаблона MenuItem, я нашел не менее четырех ControlTemplate с, трех Style с, двух Brush с, список продолжался. Используйте Blend для «Редактирования копии» любого MenuItem.

Внутри ControlTemplate, относящейся к подменю MenuItem, находится управляющий примитив, называемый Popup, объявленный так:

            <Popup x:Name="PART_Popup" 
                   AllowsTransparency="true" 
                   Focusable="false" 
                   HorizontalOffset="-2" 
                   IsOpen="{Binding IsSubmenuOpen, 
                            RelativeSource={RelativeSource TemplatedParent}}" 
                   PopupAnimation="{DynamicResource 
                                    {x:Static SystemParameters.MenuPopupAnimationKey}}" 
                   Placement="Right" 
                   VerticalOffset="-3">

Обратите внимание на свойство PopupAnimation; это указывает на SystemParameters.MenuPopupAnimationKey. Это то, что оживляет ваше меню.

Это дает вам два варианта, которые мне придутся, оба из которых потребуют, чтобы вы определили собственный шаблон для MenuItem s в вашем приложении:

  • Переконфигурировать PART_Popup, чтобы AllowsTranparency="False"; или
  • Повторный шаблон MenuItem для вашего приложения, удаляющий ссылку PopupAnimation на анимацию ОС.

Затем вы можете создать свои собственные триггеры для анимации появления этого всплывающего окна.

0 голосов
/ 26 июня 2010

A Context Menu или Menu в любом Windows Application управляется самим Windows Operating System. Вы можете перейти к Display Properties> Appearance, чтобы изменить способ отображения Menu в системе.

Для WPF Application вы можете подписаться на Menu Opening/Opened событие и запустить Storyboard для его анимации. Я не уверен в том, как это сделать, но я думаю, что именно так вы сможете изменить поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...