しらとりのブログ

社会人ひよこプログラマのtil

WPFでプロパティの変更をトリガーにしてアニメーションするときにハマったこと

DataTriggerを使ってアニメーションをするスタイルを作ってハマってしまった。以下が間違ったコード。これだと初期化したときしかアニメーションしなかった。

<Style x:Key="animetionStyle" TargetType="StackPanel">
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsChecked}" Value="true">
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <!-- trueの時のアニメーション -->
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
        </DataTrigger>
        <DataTrigger Binding="{Binding IsChecked}" Value="false">
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <!-- falseの時のアニメーション -->
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
        </DataTrigger>
    </Style.Triggers>
</Style>

正しくはこちら。

<Style x:Key="animetionStyle" TargetType="StackPanel">
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsChecked}" Value="true">
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <!-- trueの時のアニメーション -->
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
            <DataTrigger.ExitActions>
                <BeginStoryboard>
                    <Storyboard>
                        <!-- falseの時のアニメーション -->
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.ExitActions>
        </DataTrigger>
    </Style.Triggers>
</Style>

XAMLは雰囲気でも書いてしまっても割と動くので変な勘違いをすることが多い。。。もっと条件を増やす時はMultiDataTriggerというものがあるらしい。