我们的设计师对此非常着迷,我只是找不到正确的搜索关键字来找出解决方法。
WPF 中的菜单和上下文菜单具有与其关联的“显示”动画。我们希望在不破坏系统设置的情况下消除这些问题。我设法使用 Blend 将模板拉出来,但其中没有任何关于动画的内容。一定是从某个地方继承的吗?
有人可以帮忙吗?任何想法将不胜感激。
最佳答案
总之,decyclone是对的;它来自操作系统,但原因如下:
MenuItem 的默认模板包含用于显示子菜单的标记和逻辑。看那儿。
当我打开 MenuItem 模板的副本时,我发现不少于四个 ControlTemplate
s,三Style
s,两个Brush
是的,这样的例子不胜枚举。使用 Blend 来“编辑任何菜单项的副本”。
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
属性(property);它指向SystemParameters.MenuPopupAnimationKey
。这就是使菜单具有动画效果的东西。
这给了我两个选择,这两个选择都需要您为 MenuItem
定义一个自定义模板。在您的应用程序中:
- 重新配置 PART_Popup 以便
AllowsTranparency="False"
;或 - 重新模板
MenuItem
对于您的应用程序,删除PopupAnimation
对操作系统动画的引用。
然后,您可以编写自己的触发器来为弹出窗口的显示方式设置动画。
关于wpf - 如何防止 WPF 中的动画菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3121726/