WPF MVVM在主窗口关闭时触发动画
我正在尝试在我的应用程序中实现MVVM。我有一个MainWindow.xaml和一个MainWindowViewModel。我正在从MainWindow.xaml中删除所有的代码隐藏代码,但最后一个问题让我束手无策 在MVVM之前的设置中,我在MainWindow.xaml.cs中启动了一个动画,该动画在关闭窗体之前会淡出窗体。因为关闭不是一个RoutedEvent,所以我不得不使用代码隐藏来实现这一点 我的VM有以下两个可以绑定的属性:ClosingWindow和CloseWindow。我的目标是将MainWindowsStyle中的DataTrigger绑定到VM的ClosingWindow属性。当ClosingWindow设置为True时,它将使用以下XAML启动动画:WPF MVVM在主窗口关闭时触发动画,wpf,animation,mvvm,triggers,Wpf,Animation,Mvvm,Triggers,我正在尝试在我的应用程序中实现MVVM。我有一个MainWindow.xaml和一个MainWindowViewModel。我正在从MainWindow.xaml中删除所有的代码隐藏代码,但最后一个问题让我束手无策 在MVVM之前的设置中,我在MainWindow.xaml.cs中启动了一个动画,该动画在关闭窗体之前会淡出窗体。因为关闭不是一个RoutedEvent,所以我不得不使用代码隐藏来实现这一点 我的VM有以下两个可以绑定的属性:ClosingWindow和CloseWindow。我的目
<DataTrigger Binding="{Binding ClosingWindow}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:2"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
<DataTrigger Binding="{Binding CloseWindow}" Value="True">
<Setter Property="ab:WindowCloseBehavior.Close" Value="True"/>
</DataTrigger>
不知何故(在这里插入魔术),当动画完成时,我打算通过绑定将VM上的CloseWindow设置为True,然后使用AttachedBehavior关闭窗口。当我直接使用以下XAML设置CloseWindow时,AttachedBehavior可以完美地工作:
<DataTrigger Binding="{Binding ClosingWindow}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:2"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
<DataTrigger Binding="{Binding CloseWindow}" Value="True">
<Setter Property="ab:WindowCloseBehavior.Close" Value="True"/>
</DataTrigger>
…但我想在窗体实际关闭之前复制窗体淡入淡出
因此,我遇到了两个问题:第一,动画不起作用。我正确地输入了触发器(我取出了动画,并在其中放置了一个Setter语句,该语句将主窗口的标题更改为“Closing”,当ClosingWindow=True时,它将正确地更改),但DoubleAnimation从不做任何事情。其次,动画完成后,无法设置CloseWindow的值。我看了Marlon Grech的,但这对数据触发器不起作用。我不能发布RouteEvent,因为我的虚拟机不是从UIElement派生的,我整天都在谷歌上搜索,试图找到一种聪明的、MVVM友好的方法来实现这一点,但运气不好
那你知道为什么那部动画什么都没做吗?更重要的是,您将如何解决在虚拟机关闭时设置窗体淡入淡出动画的整个问题?我不怀疑我对这个问题的整个解决方案可能会遭到破坏,所以我对任何事情都持开放态度 我是WPF的新手,但我有一个想法(希望这不是愚蠢的想法) 为什么不简单地添加一个两秒钟后开始的布尔动画,并将ab:WindowCloseBehavior.Close“值设置为true”true 像这样的事情:
<DataTrigger Binding="{Binding ClosingWindow}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:2"/>
<BooleanAnimationUsingKeyFrames
Storyboard.TargetName="myAnimatedButton" Storyboard.TargetProperty="ab:WindowCloseBehavior.Close"
Duration="0:0:4" FillBehavior="HoldEnd">
<DiscreteBooleanKeyFrame Value="True" KeyTime="0:0:2" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
再说一次,我不是专家,只是一个想法