Вчера мне не удалось получить ответ, но, возможно, я недостаточно глубоко понял проблему, чтобы сформулировать правильный вопрос.
Рассказ об анимации высоты ListBox. Вот следующие скриншоты:
а) «Средний» - это текстовый блок
![Image1](https://i.stack.imgur.com/DzWvx.png)
b) «Средний» TextBlock заменяется ListBox. Пользователь выбирает предмет. Это инициирует анимацию ListBox.Height. После завершения анимации ListBox заменяется оригинальным TextBlock.
(Не обращайте внимания на различия в данных. Сбор изображений был болезненным процессом, когда мне приходилось работать с визуализированными кадрами. Одно из изображений было снято для другой записи.)
![Img4](https://i.stack.imgur.com/37vRs.png)
Эта последовательность работает с периодическим мерцанием. Я хотел знать, что происходит, и через некоторое время я получил этот скриншот:
![Img5](https://i.stack.imgur.com/gLsdx.png)
То, что вы видите, это первый кадр после того, как событие Storyboard.Completed было перехвачено. Насколько я понимаю, это окончательный результат раскадровки.
Примечания:
В этот момент я проверил визуальное дерево и не нашел ничего подозрительного.
Это только один из эффектов, которые происходят. Другим частым случаем является ListBox размером 1 строка с измененной штриховкой; в этом случае все элементы над списком исчезают. 3-я возможность - диагональная красная линия на весь экран.
Вот код, определяющий раскадровку:
private Storyboard GetDropDownAnimation(double from, double to)
{
double secs = this.IsExpanded ? 0.2 : 0.4;
CubicEase ease = new CubicEase() { EasingMode = EasingMode.EaseInOut };
DoubleAnimation animation = new DoubleAnimation()
{
Duration = new Duration(TimeSpan.FromSeconds(secs)),
From = from,
To = to,
FillBehavior = FillBehavior.HoldEnd,
EasingFunction = ease
};
Debug.WriteLine("Animation Height {0} -> {1}", from, to);
Storyboard.SetTarget(animation, this);
Storyboard.SetTargetProperty(animation, new PropertyPath("Height"));
Storyboard sb = new Storyboard();
sb.Children.Add(animation);
return sb;
}
Я мог бы объяснить другие проделанные трюки (долгое время я был уверен, что проблема есть), но похоже, что проблема касается только самой анимации.
Кто-нибудь может объяснить, что происходит?