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参数不可访问,非常感谢!我来试试。嘿,对不起,你能看一下最新的问题吗。我不得不将情节提要从按钮移动到用户控件资源,现在我得到了问题中描述的错误。你能帮我吗?我认为你不应该编辑这个问题,但你应该问一个新问题,因为你的问题是不同的。试着回滚这个问题,也许其他人会对它感兴趣,然后创建一个新的问题好的,当然,我把它改回去了。我将发布新问题的链接请查看我的新问题:我认为你不应该编辑这个问题,但是你应该问一个新问题,因为你的问题不同。试着回滚这个问题,也许其他人会对它感兴趣,然后创建一个新的问题好的,当然,我把它改回去了。我将发布新问题的链接。请在此处查看我的新问题: