【发布时间】:2012-04-24 12:30:14
【问题描述】:
我正在尝试淡入文本块然后淡出以在 MVVM 中显示成功消息,但我无法让它再次淡出。我看过这个:WPF MVVM Property Change Animation 但并没有真正关注。 这是样式:
<Style TargetType="TextBlock" x:Key="fadeinout">
<Style.Triggers>
<EventTrigger RoutedEvent="Binding.TargetUpdated">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(TextBlock.Opacity)" From="0.0" To="1.0" Duration="0:0:5"/>
<DoubleAnimation Storyboard.TargetProperty="(TextBlock.Opacity)" From="1.0" To="0.0" Duration="0:0:5"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
在视图中
<TextBlock Text="{Binding Path=SuccessMessage}" Style="{StaticResource fadeinout}" Width="60"/>
在视图模型中,保存后我这样做:
SuccessMessage = "Success";
其中 SuccessMessage 是具有调用 PropertyChanged 的设置器的属性。我想我希望将文本固定为“您的保存成功”之类的内容,但无论如何我希望视图模型能够执行使文本块淡入然后再次淡出的操作,并在用户再次保存时重复。我需要做什么?
编辑(我 8 小时无法自行回答): 必须将 NotifyOnTargetUpdated 添加到绑定中,现在它淡入淡出:
<TextBlock Text="{Binding SuccessMessage, NotifyOnTargetUpdated=True}" Style="{StaticResource fadeInOut}"
根据 Jakob 的回答,我现在有一个 TextBox(但将 EventTrigger 更改为 Binding.TargetUpdated),一个像上面一样的 TextBlock 和一个像这样的 TextBlock 内联:
<TextBlock Text="{Binding SuccessMessage, NotifyOnTargetUpdated=True}" Opacity="0" x:Name="tbMessage" Width="60" HorizontalAlignment="Left">
<TextBlock.Triggers>
<EventTrigger RoutedEvent="Binding.TargetUpdated">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="tbMessage" Storyboard.TargetProperty="Opacity" To="1" BeginTime="0:0:0" Duration="0:0:1" />
<DoubleAnimation Storyboard.TargetName="tbMessage" Storyboard.TargetProperty="Opacity" To="0" BeginTime="0:0:3" Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</TextBlock.Triggers>
</TextBlock>
并且所有三个都随着每次保存而淡入淡出。奇怪的是,尽管使用相同的时序,但模板化的一个略微落后于其他两个。
【问题讨论】:
标签: wpf storyboard