我使用的是想在我的應用程序來實現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友好的方式來做到這一點,但沒有運氣。
因此,任何想法,爲什麼該動畫不會做任何事情?更重要的是,你如何解決動畫表單動畫縮短虛擬機的整個問題?我不懷疑我對這個問題的整個解決方案可能會受到打擊,所以我對任何事情都是開放的。