1

WPFとMVVMを使用しています。ViewModelのある状態でトリガーされるカラーアニメーションを備えたストーリーボードがあります。「増加」状態の場合、ストーリーボードによってアイテムが1回緑色に点滅します。「減少」状態の場合、ストーリーボードは1回赤く点滅します。「変更なし」状態の場合、何も起こりません。

私が抱えている問題は、アニメーションの実行中に何らかの理由で状態が変化した場合、アニメーションが停止することです。たとえば、増加状態に入ると、アニメーションが緑色に点滅し始めます。次に、同じプロパティがUnchangedに変更され、アニメーションは終了せずにすぐに停止します。

トリガーする値が変更された場合でも、アニメーションをコースで実行させる方法はありますか?

<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>

解決策:終了アクションを削除することと、塗りつぶし動作を停止に設定することの組み合わせ。

4

1 に答える 1

0

次の行を削除します。

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

次に、Storyboard.Completedイベントをサブスクライブします。EventSetterを使用してXAMLから実行できます。Completedイベントハンドラーでストーリーボードを削除します。

于 2012-08-14T20:54:00.750 に答える