我使用的是想在我的应用程序来实现MVVM。我有一个MainWindow.xaml和一个MainWindowViewModel。我正在从MainWindow.xaml中删除所有代码隐藏代码,但我被困在最后一块。WPF MVVM触发动画在主窗口关闭
在我的预MVVM设置我将关闭它之前淡出形式MainWindow.xaml.cs开始的动画。由于Closing不是RoutedEvent,因此我必须使用代码隐藏来实现此功能。
我的VM具有可结合以下两个属性:ClosingWindow和CloseWindow。我的目标是将我的MainWindowStyle中的DataTrigger绑定到VM的ClosingWindow属性。当ClosingWindow设置为true,它会使用以下XAML启动动画:
<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>
不知怎的,(插入魔术在这里)我要设置CloseWindow在虚拟机上,通过结合,为True当动画完成,然后使用AttachedBehavior关闭窗口。该AttachedBehavior完美的作品时,我只设置CloseWindow直接使用下面的XAML:
<DataTrigger Binding="{Binding CloseWindow}" Value="True">
<Setter Property="ab:WindowCloseBehavior.Close" Value="True"/>
</DataTrigger>
...但我想重现形式褪色的形式实际上关闭之前。
所以有一些我碰到两个问题:首先,动画不起作用。我正确地输入了触发器(我取出了动画,并在其中放置了一个Setter语句,将MainWindow的标题更改为“Closing”,并且它在ClosingWindow = True时正确更改),但DoubleAnimation从不执行任何操作。其次,动画完成后,无法设置CloseWindow的值。我看着Marlon Grech的animation code,但这对DataTriggers不起作用。我无法发布RoutedEvent,因为我的虚拟机不是从UIElement下载的,而且我一直在Google上搜索,试图提出一种聪明的,MVVM友好的方式来做到这一点,但没有运气。
因此,任何想法,为什么该动画不会做任何事情?更重要的是,你如何解决动画表单动画缩短虚拟机的整个问题?我不怀疑我对这个问题的整个解决方案可能会受到打击,所以我对任何事情都是开放的。