C# 使用情节提要平滑WPF触发器中的退出
我有一个WPF应用程序,在这里我想覆盖丑陋的默认WPF样式。我已经创建了Styles.xaml字典,在这里我几乎已经完成了样式,但是在动画和不同视觉状态(触发器)之间的平滑转换方面存在一些问题 我面临的一个挑战是,我不想将任何C事件处理程序或其他C代码绑定到样式 这里我提供了一些关于触发器的代码:C# 使用情节提要平滑WPF触发器中的退出,c#,wpf,xaml,wpf-animation,C#,Wpf,Xaml,Wpf Animation,我有一个WPF应用程序,在这里我想覆盖丑陋的默认WPF样式。我已经创建了Styles.xaml字典,在这里我几乎已经完成了样式,但是在动画和不同视觉状态(触发器)之间的平滑转换方面存在一些问题 我面临的一个挑战是,我不想将任何C事件处理程序或其他C代码绑定到样式 这里我提供了一些关于触发器的代码: <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsEnabled"
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsEnabled" Value="True" />
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="IsPressed" Value="False" />
</MultiTrigger.Conditions>
<MultiTrigger.EnterActions>
<BeginStoryboard Name="MouseOverStoryboard">
<Storyboard Duration="0:0:0.25" SlipBehavior="Grow">
<ColorAnimation Storyboard.TargetName="InnerBorder"
Storyboard.TargetProperty="Background.(SolidColorBrush.Color)"
To="{StaticResource White}"
BeginTime="0:0:0" Duration="0:0:0.25" />
<DoubleAnimation Storyboard.TargetName="InnerBorder"
Storyboard.TargetProperty="Opacity"
To="0.3"
BeginTime="0:0:0" Duration="0:0:0.25" />
</Storyboard>
</BeginStoryboard>
</MultiTrigger.EnterActions>
<MultiTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="MouseOverStoryboard" />
</MultiTrigger.ExitActions>
</MultiTrigger>
为了使动画流畅,我添加了EnterAction,并将情节串联板和计时放在这里,这样进入动画就很流畅,看起来也不错
我的第一个问题是如何在执行BeginStoryboard时恢复默认颜色,但后来我意识到我可以使用RemoveStoryboard
现在我真的不知道我的想法出来了-如何使顺利退出动画?我不应该使用RemoveStoryboard吗
请提供建议。谢谢
另外,我没有使用VisualStateManager,因为缺少状态,我不想为此实现自己的控件。添加一个新的动画对象,该对象在“输入动作”动画持续时间结束时开始。 或者使用触发器的
ExitAction
属性,添加一个情节提要
,恢复您的输入
。
或者您可以尝试将Fillbehavior
属性设置为“停止…”
另一种选择是使用
EventSetter
捕捉RoutedEvents
如MouseEnter
和MouseLeave
,则第一种行为是不好的。我有MouseOver事件,如果我将FillBehavior设置为Stop,那么在动画之后,我的按钮变成默认样式。它必须是鼠标悬停的样式。那么为什么不在你的ExitActions中添加另一个BeginStoreBoard呢?您还可以添加另一个触发器,该触发器在IsMousOver==false时触发。也可以通过在触发器中使用简单的Setter来设置Background属性。如果触发器无效,这将自动还原设置。因为默认状态颜色不能是我从样式中设置的颜色。如果用户将其颜色笔刷从视图中移开,则另一个BeginStoryboard将覆盖该颜色并返回到我预定义的颜色…使用EventSetter(MouseEnter,MouseLeave)我认为使用静态资源笔刷(如“DefaultBackgroundBrush”)更干净。应用程序只会更改该笔刷的颜色以设置新的默认颜色。现在,在控制视觉状态的触发器中,可以显式地将其设置回“Background={StaticResource DefaultBackgroundBrush}”,或者像我之前写的那样,只使用一个公共Setter。一旦触发器无效,该值将返回到以前的状态。使用这种方法,您不需要关心实际的默认颜色。它是DefaultBackgroundBrush的当前颜色。