Эти анимации будут дочерними для одного или нескольких Storyboard
объектов.Вам нужно остановить эти раскадровки в событии Unloaded
пользовательского элемента управления.
Чего не хватает большинству разработчиков, так это того, что Storyboard
без продолжительности будет работать бесконечно.Это упущено, потому что результаты этой неопределенной работы часто желательны.Например, анимация затухает элемент, разработчик хочет, чтобы он остался невидимым.Если временная шкала, к которой принадлежит анимация, остановлена, свойство непрозрачности элемента вернется к назначенному значению до запуска анимации.
В вашем случае вы также хотите, чтобы раскадровки ваших анимаций работали бесконечно, пока пользовательский контрользагружен.Однако, чтобы получить желаемый эффект, вам нужно остановить раскадровки в незагруженном событии.
Достаточно просто остановить раскадровку, у нее есть метод Stop
.Хитрость заключается в том, чтобы овладеть раскадровкой.Проще всего это дать раскадровке x:Name
.Теперь вы можете сделать что-то вроде этого: -
public MyUserControl()
{
InitializeComponent();
Unloaded += MyUserControl_Unloaded;
}
void MyUserControl_Unloaded(object sender, RoutedEventArgs e)
{
LoadedStoryboard.Stop();
}
, где LoadedStoryboard
- это значение x:Name
для раскадровки, которая запускает загруженную анимацию.