やる気駆動型エンジニアの備忘録

WPF(XAML+C#)の話題を中心に.NET/Android/CI やたまに趣味に関するブログです

StoryboardのStopに失敗する場合の対処法

WPFでStoryboardをコードビハインドで終了させる際に、詰まったポイントをメモメモ

private void StartButton_Click(object sender, EventArgs e)
{
    // storyboard には既にリソース上のStoryboard を設定しているものとする。
    storyboard.Start(Ellipse1);
}

private void EndButton_Click(object sender, EventArgs e)
{
    // ここでアニメーションを停止させたい。
    storyboard.Stop(Ellipse1);
}

このようなコードがあったとして、実行すると以下のメッセージが表示されました。

System.Windows.Media.Animation Warning: 6 : Unable to perform action because the specified Storyboard was never applied to this object for interactive control.; Action='Stop';

なんじゃこりゃ
と思いいろいろ調べてみましたが、以下のページが参考になりました。

stackoverflow.com

警告メッセージをざっくり訳すと、
"Storyboardが対話制御設定されていないからStop動作は実行できないよ。"
とのこと。

で、上記のページを見るとBeginの第三引数に対話制御を可能とするかどうかのフラグを設定せよ とのこと。
なので正しいコードはこう↓↓↓

private void StartButton_Click(object sender, EventArgs e)
{
    // storyboard には既にリソース上のStoryboard を設定しているものとする。
    storyboard.Start(Ellipse1, true);
}

private void EndButton_Click(object sender, EventArgs e)
{
    // ここでアニメーションを停止させたい。
    storyboard.Stop(Ellipse1);
}

これが例外も発行しないし、出力ウィンドウにささやかなメッセージだけを残すので全く気が付かなかった。
というか、メッセージに気がついても修正方法がわかんなかった。