【发布时间】:2017-11-22 09:52:21
【问题描述】:
我需要做什么:
在
GotFocus事件发生时,没有MouseEnter和MouseLeave事件运行。-
在
LostFocus、MouseEnter和MouseLeave事件之后再次激活。
鉴于需要,我写了如下代码,但是Pause和Resume的命令不起作用。
<ControlTemplate x:Key="SpecialNumber" TargetType="{x:Type TextBox}">
<Grid>
<Image x:Name="SpecialBg" Style="{DynamicResource CallStatusSpecialBg}"/>
<Image x:Name="SpecialIBeam" Style="{DynamicResource CallStatusSpecialIBeam}" Source="../image/I-beam-b.png"/>
<TextBox x:Name="SpecialText" Style="{DynamicResource CallStatusSpecialNumberText}" Text="5555" />
</Grid>
<ControlTemplate.Resources>
<Storyboard x:Key="Hide">
<DoubleAnimation Storyboard.TargetName="SpecialBg" Storyboard.TargetProperty="Opacity" Duration="0:0:0.4" To="0" />
<DoubleAnimation Storyboard.TargetName="SpecialIBeam" Storyboard.TargetProperty="Opacity" Duration="0:0:0.2" To="0" />
<DoubleAnimation Storyboard.TargetName="SpecialText" Storyboard.TargetProperty="Opacity" Duration="0:0:0.2" To="0" />
</Storyboard>
<Storyboard x:Key="ShowHalf">
<DoubleAnimation Storyboard.TargetName="SpecialBg" Storyboard.TargetProperty="Opacity" Duration="0:0:0.2" To="1" />
<DoubleAnimation Storyboard.TargetName="SpecialIBeam" Storyboard.TargetProperty="Opacity" Duration="0:0:0.4" To="1" />
<DoubleAnimation Storyboard.TargetName="SpecialText" Storyboard.TargetProperty="Opacity" Duration="0:0:0.2" To="0.01" />
</Storyboard>
<Storyboard x:Key="Show">
<DoubleAnimation Storyboard.TargetName="SpecialBg" Storyboard.TargetProperty="Opacity" Duration="0:0:0.2" To="1" />
<DoubleAnimation Storyboard.TargetName="SpecialIBeam" Storyboard.TargetProperty="Opacity" Duration="0:0:0.4" To="1" />
<DoubleAnimation Storyboard.TargetName="SpecialText" Storyboard.TargetProperty="Opacity" Duration="0:0:0.2" To="1" />
</Storyboard>
</ControlTemplate.Resources>
<ControlTemplate.Triggers>
<EventTrigger SourceName="SpecialText" RoutedEvent="UIElement.MouseEnter" >
<EventTrigger.Actions>
<BeginStoryboard Storyboard="{StaticResource ShowHalf}" x:Name="SpecialTextMouseEnter"/>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger SourceName="SpecialText" RoutedEvent="UIElement.MouseLeave" >
<EventTrigger.Actions>
<BeginStoryboard Storyboard="{StaticResource Hide}" x:Name="SpecialTextMouseLeave"/>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger SourceName="SpecialText" RoutedEvent="UIElement.GotFocus" >
<EventTrigger.Actions>
<PauseStoryboard BeginStoryboardName="SpecialTextMouseLeave" />
<PauseStoryboard BeginStoryboardName="SpecialTextMouseEnter" />
<BeginStoryboard Storyboard="{StaticResource Show}" x:Name="SpecialTextGotFocus"/>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger SourceName="SpecialText" RoutedEvent="UIElement.LostFocus" >
<EventTrigger.Actions>
<ResumeStoryboard BeginStoryboardName="SpecialTextMouseLeave" />
<ResumeStoryboard BeginStoryboardName="SpecialTextMouseEnter" />
<BeginStoryboard Storyboard="{StaticResource Hide}" x:Name="SpecialTextLostFocus"/>
</EventTrigger.Actions>
</EventTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
【问题讨论】:
-
复制一些相关的评论from MSDN:“PauseStoryboard 仅在 Storyboard 处于活动状态时(在 Storyboard 启动后)影响” 和 “当 BeginStoryboard 动作时在暂停后触发,它似乎恢复并重新启动”。这不是一个解决方案,但至少是一个问题描述
-
@grek40 谢谢。
标签: wpf xaml wpf-animation