在WPF应用程序中打开或关闭ContextMenu时调整按钮的视觉状态
在我正在开发的WPF应用程序中,有一个在WPF应用程序中打开或关闭ContextMenu时调整按钮的视觉状态,wpf,storyboard,eventtrigger,Wpf,Storyboard,Eventtrigger,在我正在开发的WPF应用程序中,有一个按钮样式,它定义了自己的模板(控制模板) 我通过ControlTemplate.Triggers处理视觉更新,如IsMouseOver: <Trigger Property="IsMouseOver" Value="True"> <Trigger.EnterActions> <BeginStoryboard> <Storyboard> <Doub
按钮样式,它定义了自己的模板(控制模板)
我通过ControlTemplate.Triggers处理视觉更新,如IsMouseOver
:
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="IsMouseOverBorder"
Storyboard.TargetProperty="Opacity"
To="1"
Duration="0:0:0.08" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="IsMouseOverBorder"
Storyboard.TargetProperty="Opacity"
To="0"
Duration="0:0:0.16" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
你知道为什么这不起作用,或者是一种替代方法吗?我使用问题中定义的样式来实现这一点,但我必须手动引发ContextMenuService.ContextMenuClosingEvent
事件(使用一些反射):
<EventTrigger RoutedEvent="ContextMenuService.ContextMenuOpening">
<BeginStoryboard Name="ContextMenuOpeningStoryboard">
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="IsMouseOverBorder"
Storyboard.TargetProperty="Opacity"
To="1"
Duration="0" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="ContextMenuService.ContextMenuClosing">
<RemoveStoryboard BeginStoryboardName="ContextMenuOpeningStoryboard" />
</EventTrigger>
<ContextMenu Closed="ContextMenu_Closed">...</ContextMenu>
private void ContextMenu_Closed(object sender, RoutedEventArgs args)
{
var type = typeof(ContextMenuEventArgs);
var contextMenuEventArgs = (ContextMenuEventArgs) type.Assembly.CreateInstance
(
type.FullName, false, BindingFlags.Instance | BindingFlags.NonPublic, null,
new object[] { this, false }, null, null
);
if (contextMenuEventArgs != null)
{
contextMenuEventArgs.RoutedEvent = ContextMenuService.ContextMenuClosingEvent;
_myToggleButton.RaiseEvent(contextMenuEventArgs);
}
}