Wpf 动画完成后如何正确执行命令?

Wpf 动画完成后如何正确执行命令?,wpf,mvvm,Wpf,Mvvm,我有一个按钮如下: <Button x:Name ="Btn_Import" Grid.Row="33" Grid.Column="15" Grid.ColumnSpan="36" Grid.RowSpan="36" > <Button.Template> <ControlTemplate> <Grid RenderTransformOrigin="0.5,0

我有一个按钮如下:

<Button x:Name ="Btn_Import" Grid.Row="33" Grid.Column="15" Grid.ColumnSpan="36" Grid.RowSpan="36" >
            <Button.Template>
                <ControlTemplate>
                    <Grid RenderTransformOrigin="0.5,0.5" x:Name="bg">
                        <Image x:Name ="import_image" Source="{Binding ImportBtnBaseImagePath}"/>

                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="import_image" Property="Source" Value="{Binding ImportBtnOverImagePath}" />
                        </Trigger>

                        <Trigger Property="ButtonBase.IsPressed"  Value ="True">
                            <!-- press effect -->
                            <Setter TargetName="bg" Property="RenderTransform">
                                <Setter.Value>
                                    <ScaleTransform ScaleX="0.9" ScaleY="0.9"/>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Button.Template>

            <Button.Triggers>
                <EventTrigger RoutedEvent="PreviewMouseDown" >
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetName="Studio" Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:2" >
                                <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="Completed">
                                        <i:InvokeCommandAction Command="{Binding NavigateCommand}" CommandParameter="ImportButtonClickParmeters" />
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </DoubleAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Button.Triggers>

        </Button>
我希望此按钮触发其他控件上的动画淡出2秒,然后在动画完成后通过“NavigateCommand”导航到其他视图。但我得到了以下错误:

其他信息:类型的指定值 “System.Windows.Interactivity.EventTrigger”必须设置为IsFroze 假修改


你的问题取决于一位知名人士。不幸的是,我发现,在这种情况下,它不能正常工作

无论如何,如果您希望保持应用程序MVVM兼容,我建议您创建一个假动画,其任务是执行命令。当然,此动画必须是故事板中的最后一个动画

这是CommandFakeAnimation代码:

如您所见,您可以将此动画应用于所需的任何依赖属性,因为它不会更改其值。它只是在完成后执行一个命令

现在,我们可以在XAML中使用新动画:

<Button.Triggers>
    <EventTrigger RoutedEvent="PreviewMouseDown">
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:2" />
                <local:CommandFakeAnimation Duration="0:0:0" Command="{Binding Path=YourCommand, Mode=OneWay}"
                                            CommandParameter="{Binding Path=YourParameter, Mode=OneWay}" 
                                            Storyboard.TargetProperty="Opacity" />
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Button.Triggers>

我希望它能对您有所帮助。

您的问题取决于一位知名人士。不幸的是,我发现,在这种情况下,它不能正常工作

无论如何,如果您希望保持应用程序MVVM兼容,我建议您创建一个假动画,其任务是执行命令。当然,此动画必须是故事板中的最后一个动画

这是CommandFakeAnimation代码:

如您所见,您可以将此动画应用于所需的任何依赖属性,因为它不会更改其值。它只是在完成后执行一个命令

现在,我们可以在XAML中使用新动画:

<Button.Triggers>
    <EventTrigger RoutedEvent="PreviewMouseDown">
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:2" />
                <local:CommandFakeAnimation Duration="0:0:0" Command="{Binding Path=YourCommand, Mode=OneWay}"
                                            CommandParameter="{Binding Path=YourParameter, Mode=OneWay}" 
                                            Storyboard.TargetProperty="Opacity" />
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Button.Triggers>

我希望它能帮助你。

非常感谢你的回答。你能告诉我如何在CommandFakeAnimation上传递命令参数吗?如果我添加以下内容:CommandParameter={Binding ImportButtonClickParmeters},那么它会说command参数不可访问,非常感谢!我来试试。嘿,对不起,你能看一下最新的问题吗。我不得不将情节提要从按钮移动到用户控件资源,现在我得到了问题中描述的错误。你能帮我一下吗?非常感谢你的回答。你能告诉我如何在CommandFakeAnimation上传递命令参数吗?如果我添加以下内容:CommandParameter={Binding ImportButtonClickParmeters},那么它会说command参数不可访问,非常感谢!我来试试。嘿,对不起,你能看一下最新的问题吗。我不得不将情节提要从按钮移动到用户控件资源,现在我得到了问题中描述的错误。你能帮我吗?我认为你不应该编辑这个问题,但你应该问一个新问题,因为你的问题是不同的。试着回滚这个问题,也许其他人会对它感兴趣,然后创建一个新的问题好的,当然,我把它改回去了。我将发布新问题的链接请查看我的新问题:我认为你不应该编辑这个问题,但是你应该问一个新问题,因为你的问题不同。试着回滚这个问题,也许其他人会对它感兴趣,然后创建一个新的问题好的,当然,我把它改回去了。我将发布新问题的链接。请在此处查看我的新问题: