如何防止WPF中的动画菜单?

时间:2010-06-25 22:00:20

标签: wpf

我们的设计师对此非常关注,我找不到合适的搜索关键字来弄清楚如何修复它。

WPF中的菜单和ContextMenus“揭示”与它们相关的动画。我们希望在不搞乱系统设置的情况下消除那些。我设法使用Blend将模板拉出来,但那里没有关于动画的内容。必须从某个地方继承吗?

有人可以帮忙吗?任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:4)

简而言之,decyclone是对的;它来自操作系统,但这就是原因:

MenuItem的默认模板包含用于显示子菜单的标记和逻辑。看那里。

当我打开一个MenuItem模板的副本时,我发现不少于四个ControlTemplate,三个Style,两个Brush es,列表继续。使用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定义自定义模板:

  • 重新配置PART_Popup以便AllowsTranparency="False";或
  • 为您的应用程序重新模板MenuItem,删除PopupAnimation对操作系统动画的引用。

然后,您可以创建自己的触发器,以便为弹出窗口的显示方式设置动画。

答案 1 :(得分:0)

任何Context Menu中的MenuWindows ApplicationWindows Operating System本身管理。您可以转到Display Properties&gt; Appearance更改Menu在系统中的显示方式。

对于WPF Application,您可以订阅Menu的{​​{1}}事件并开始Opening/Opened为其设置动画。我不知道如何做到这一点,但我认为这是你应该能够改变行为的方式。