Wpf 如何根据ViewModel属性值添加淡入/淡出动画?
我有一个ViewModel,它公开了字符串属性PageToolBarVisible,它可以是true或false:Wpf 如何根据ViewModel属性值添加淡入/淡出动画?,wpf,xaml,animation,mvvm,triggers,Wpf,Xaml,Animation,Mvvm,Triggers,我有一个ViewModel,它公开了字符串属性PageToolBarVisible,它可以是true或false: private string _pageToolBarVisible; public string PageToolBarVisible { get { return _pageToolBarVisible; } set { _pageToolBarVisible = value; OnPro
private string _pageToolBarVisible;
public string PageToolBarVisible
{
get
{
return _pageToolBarVisible;
}
set
{
_pageToolBarVisible = value;
OnPropertyChanged("PageToolBarVisible");
}
}
然后在我的视图中我有一个数据触发器,它相应地显示或隐藏工具栏:
<Style x:Key="PageToolBarStyle" TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding PageToolBarVisible}" Value="false">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
<Border Style="{StaticResource PageToolBarStyle}"
DockPanel.Dock="Bottom" Padding="5 5 5 0" Background="#eee">
<Grid Background="#eee">
...
</Grid>
</Border>
...
现在如何添加一个动画,以便:
- 当ViewModel属性从true更改为false时,工具栏将淡出
- 当ViewModel属性从false更改为true时,工具栏在中淡入淡出
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="PageToolBar"
Storyboard.TargetProperty="(TextBlock.Opacity)"
From="0.0" To="1.0" Duration="0:0:3"/>
</Storyboard>
</BeginStoryboard>
您可以将BeginStoreBoard放在DataTrigger.EnterActions中
<DataTrigger Binding="{Binding PageToolBarVisible}" Value="false">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="PageToolBar"
Storyboard.TargetProperty="(TextBlock.Opacity)"
From="0.0" To="1.0" Duration="0:0:3"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="PageToolBar"
Storyboard.TargetProperty="(TextBlock.Opacity)"
From="1.0" To="0.0" Duration="0:0:3"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
对于使用此方法有问题的人,可能需要删除Storyboard.TargetName,因为样式触发器中不允许使用它(不再?)。以下是答案: