如何根据ViewModel属性值添加淡入/淡出动画?

Edw*_*uay 4 wpf animation xaml triggers mvvm

我有一个ViewModel,它暴露了字符串属性PageToolBarVisible,它可以是truefalse:

private string _pageToolBarVisible;
public string PageToolBarVisible
{
    get
    {
        return _pageToolBarVisible;
    }

    set
    {
        _pageToolBarVisible = value;
        OnPropertyChanged("PageToolBarVisible");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的View上我有这个DataTrigger,它相应地显示隐藏工具栏:

<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>
Run Code Online (Sandbox Code Playgroud)

我现在如何添加 动画以便:

  • 当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>
Run Code Online (Sandbox Code Playgroud)

ama*_*int 14

您可以将BeginStoryboard放在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>
Run Code Online (Sandbox Code Playgroud)

  • 对于这种方法有问题的人,可能有必要删除 Storyboard.TargetName 因为它在 Style-triggers 中是不允许的(不再?)。这是答案:/sf/answers/2235093241/ (2认同)