2010-05-07 76 views
0

我使用的是想在我的應用程序來實現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友好的方式來做到這一點,但沒有運氣。

因此,任何想法,爲什麼該動畫不會做任何事情?更重要的是,你如何解決動畫表單動畫縮短虛擬機的整個問題?我不懷疑我對這個問題的整個解決方案可能會受到打擊,所以我對任何事情都是開放的。

回答

0

我是新來WPF,但有一個想法(希望這不是愚蠢)。

爲什麼不是簡單的booleanAnimation,將在兩秒鐘後啓動,並設置AB補充:WindowCloseBehavior.Close」值設置爲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> 

再次,我不是專家,只是一個想法。