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';
なんじゃこりゃ
と思いいろいろ調べてみましたが、以下のページが参考になりました。
警告メッセージをざっくり訳すと、
"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); }
これが例外も発行しないし、出力ウィンドウにささやかなメッセージだけを残すので全く気が付かなかった。
というか、メッセージに気がついても修正方法がわかんなかった。