読者です 読者をやめる 読者になる 読者になる

開発備忘録

WPF(Xaml + C#)の話題を中心に.Net関連についてのブログです。

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

WPF

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);
}

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