如何禁用WPF ContextMenu动画?

sco*_*obi 11 wpf

我正在尝试寻找我需要调整的一点,以便在WPF中获取ContextMenus,以便在它们出现/消失时停止动画.

据我所知,WPF创建了一个Popup来托管ContextMenu.Popup查看其PopupAnimation属性并决定如何设置动画.我想要做的就是将其设置为"无".

我尝试使用Popup的TargetType设置一个全局未命名样式,将PopupAnimation设置为None但这不起作用.如果我在System.Windows.Controls.Primitives.Popup.SetupAnimations中断,我可以看到动画类型仍然设置为Fade.我猜它还没有机会申请款式..

我试过挂钩ContextMenuOpening但是我找不到那里的Popup.

我还能尝试什么?

请注意,这是我在这里提出的另一个问题的第二部分.那里的建议非常适合菜单和我们拥有的其他动画,但一个例外是ContextMenus.它们基于代码中的属性进行动画处理,而不是模板.我通过使用此处给出的建议拉出ContextMenu模板来验证这一点.

Mår*_*röm 28

我也一直在努力解决这个问题.我发现解决方案是"覆盖" 控制弹出动画系统参数.

通过定义一个资源(可能在你的Themes\Generic.xaml)这样做:

<PopupAnimation x:Key="{x:Static SystemParameters.MenuPopupAnimationKey}">None</PopupAnimation>
Run Code Online (Sandbox Code Playgroud)


Ano*_*Dev 5

我花了半个小时试图找出如何在代码中执行此操作 - 如果您更好地了解框架,我肯定很明显:

var app = new Application();
app.Resources.Add(SystemParameters.MenuPopupAnimationKey, PopupAnimation.None);
app.Run(myThing);
Run Code Online (Sandbox Code Playgroud)