首先是 WPF 动画,然后 运行 Screen ViewModel 中的代码

First WPF animation then run the code in Screen ViewModel

你好,我有一个问题,我想做这个动画,当动画完成后,我想 运行 代码,但我不知道在 MVVM 中使用 CaliburnMicro 做这个的方法.

如果可能请帮助我。

    <Button x:Name="Forgot">
        <Button.RenderTransform>
            <TranslateTransform />
        </Button.RenderTransform>

        <Button.Triggers>

            <EventTrigger RoutedEvent="Button.Click">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="UserName"
                                         Storyboard.TargetProperty="RenderTransform.(TranslateTransform.X)"
                                         From="0" To="-1000" Duration="0:0:1" />
                        <DoubleAnimation Storyboard.TargetName="Password"
                                         Storyboard.TargetProperty="RenderTransform.(TranslateTransform.X)"
                                         From="0" To="-1000" Duration="0:0:1"  />
                        <DoubleAnimation Storyboard.TargetName="LogIn"
                                         Storyboard.TargetProperty="RenderTransform.(TranslateTransform.X)"
                                         From="0" To="-1000" Duration="0:0:1" />
                        <DoubleAnimation Storyboard.TargetName="Forgot"
                                         Storyboard.TargetProperty="RenderTransform.(TranslateTransform.X)"
                                         From="0" To="-1000" Duration="0:0:1"  />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Button.Triggers>

您应该收听动画结束后 StoryBoard 引发的 Completed 事件。

您可以为此使用 EventTrigger(尽管我不确定这是否有效)或在 XAML 中绑定处理程序并在那时做任何您想做的事。

更新:

XAML:

<Storyboard Completed="storyboard_Completed">
     ...

C#:

void storyboard_Completed(object sender, EventArgs args)
{
      // Do whatever you want here.
}

我是这样做的。

    private void DoubleAnimation_Completed(object sender, EventArgs e)
    {
        LoginViewModel vm = this.DataContext as LoginViewModel;

        vm.Forgot();
    } 

现在可以了。谢谢