2012-08-14 107 views
1

我正在使用WPF和MVVM。我有一個故事板,在ViewModel的某些狀態下觸發一個彩色動畫。如果處於「增加」狀態,故事板會使物品閃爍一次綠色。如果處於「減少」狀態,故事板將閃爍一次紅色。如果處於「未更改」狀態,則不會發生任何事情。觸發屬性更改時故事板動畫未完成

我遇到的問題是,如果出於任何原因狀態在動畫運行時發生變化,動畫將停止。例如。我進入增加狀態,動畫開始閃爍綠色。然後,相同的屬性更改爲未更改,動畫立即停止而不結束。

有沒有辦法使動畫運行其過程,即使它觸發的值已經改變了?

<Storyboard x:Key="ValueIncreasedStoryboard" AutoReverse="True"> 
    <ColorAnimation 
     Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" 
     To="{StaticResource ResourceKey=IncreasedColor}" 
     Duration="0:0:0.4" /> 
    <ColorAnimation 
     Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" 
     To="{StaticResource ResourceKey=IncreasedColor}" 
     Duration="0:0:1" /> 
</Storyboard> 

<DataTrigger Binding="{Binding Path=Status}" Value="{x:Static ViewModel:Status.Increased}"> 
    <DataTrigger.EnterActions> 
     <BeginStoryboard Storyboard="{StaticResource ValueIncreasedStoryboard}" x:Name="ValueIncreased_Storyboard"/> 
    </DataTrigger.EnterActions> 
    <DataTrigger.ExitActions> 
     <RemoveStoryboard BeginStoryboardName="ValueIncreased_Storyboard"/> 
    </DataTrigger.ExitActions> 
</DataTrigger> 

SOLUTION: 刪除退出操作和設置填充行爲停止的組合。

+0

當然,只是不要使用觸發器,並用手執行它 – dvvrd 2012-08-14 19:38:26

+0

觸發器處於多次使用的樣式。 – user815512 2012-08-14 19:43:55

+0

如果刪除'ExitActions',會發生什麼情況? – dvvrd 2012-08-14 19:58:56

回答

0

刪除此行:

<DataTrigger.ExitActions> 
    <RemoveStoryboard BeginStoryboardName="ValueIncreased_Storyboard"/> 
</DataTrigger.ExitActions> 

然後訂閱Storyboard.Completed事件。您可以使用EventSetter從XAML中完成。 在已完成的事件處理程序中刪除故事板。

+0

不幸的是,這是行不通的。 RemoveStoryboard動作實際上不需要運行嗎?我找不到實際觸發該行爲的方法。 – user815512 2012-08-14 21:13:19

+0

我甚至不認爲在Completed活動中發生的故事板是帶故障的故事板。我也嘗試了storyboard.Remove()。 – user815512 2012-08-14 21:30:55

+0

好的,調試器是否停止在Completed事件處理程序的斷點處?我還有一個想法是編寫由Completed事件執行的事件觸發器,並在其EnterActions中使用RemoveStoryboard。但它似乎是不可能的:( – dvvrd 2012-08-14 21:41:14