我们的设计师对此非常关注,我找不到合适的搜索关键字来弄清楚如何修复它。
WPF中的菜单和ContextMenus“揭示”与它们相关的动画。我们希望在不搞乱系统设置的情况下消除那些。我设法使用Blend将模板拉出来,但那里没有关于动画的内容。必须从某个地方继承吗?
有人可以帮忙吗?任何想法都将不胜感激。
答案 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
定义自定义模板:
AllowsTranparency="False"
;或MenuItem
,删除PopupAnimation
对操作系统动画的引用。 然后,您可以创建自己的触发器,以便为弹出窗口的显示方式设置动画。
答案 1 :(得分:0)
任何Context Menu
中的Menu
或Windows Application
由Windows Operating System
本身管理。您可以转到Display Properties
&gt; Appearance
更改Menu
在系统中的显示方式。
对于WPF Application
,您可以订阅Menu
的{{1}}事件并开始Opening/Opened
为其设置动画。我不知道如何做到这一点,但我认为这是你应该能够改变行为的方式。