使用数据绑定在WPF中启动动画

Mar*_*ath 8 data-binding wpf animation mvvm

我正在尝试使用简单的WPF应用程序来使用Model-View-ViewModel模式.在我的页面上,我有几个动画:

<Page.Resources>
    <Storyboard x:Name="storyboardRight"
                x:Key="storyboardRight">
        <DoubleAnimation x:Name="da3"
                         Storyboard.TargetName="labelRight"
                         Storyboard.TargetProperty="Opacity"
                         From="0"
                         To="1"
                         Duration="0:0:0.5" />
        <DoubleAnimation x:Name="da4"
                         Storyboard.TargetName="labelRight"
                         Storyboard.TargetProperty="Opacity"
                         From="1"
                         To="0"
                         BeginTime="0:0:1"
                         Duration="0:0:0.5" />
    </Storyboard>
    ...
</Page.Resources>
Run Code Online (Sandbox Code Playgroud)

目前我在后面的代码中开始动画,并且可以在完成时使用以下代码监听Completed事件:

storyboardRight = (Storyboard)TryFindResource("storyboardRight");
storyboardRight.Completed += new EventHandler(storyboardRight_Completed);
storyboardRight.Begin(this);
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以将故事板绑定到我的ViewModel,以便它可以在ViewModel引发的事件上启动,并在完成时可以回调到该ViewModel?

Mar*_*ath 9

我有机会把这个问题提交给微软的Josh Twist,他花了很多时间来解决这个问题.解决方案是DataTrigger在ViewModel中结合使用枚举来启动Storyboard,这又需要将页面放入ContentPresenter.为了处理动画完成,需要少量代码来调用ICommandViewModel.

阅读Josh的帖子,了解该解决方案的完整描述.