Я пытаюсь, как выставка, использовать DoubleAnimation на свойствах ScaleX и ScaleY ScaleTransform. У меня есть прямоугольник (144x144), который я хочу сделать прямоугольным более чем пять секунд.
Мой XAML:
Мой C#:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
ScaleTransform scaly = new ScaleTransform(1, 1);
rect1.RenderTransform = scaly;
Duration mytime = new Duration(TimeSpan.FromSeconds(5));
Storyboard sb = new Storyboard();
DoubleAnimation danim1 = new DoubleAnimation(1, 1.5, mytime);
DoubleAnimation danim2 = new DoubleAnimation(1, 0.5, mytime);
sb.Children.Add(danim1);
sb.Children.Add(danim2);
Storyboard.SetTarget(danim1, scaly);
Storyboard.SetTargetProperty(danim1, new PropertyPath(ScaleTransform.ScaleXProperty));
Storyboard.SetTarget(danim2, scaly);
Storyboard.SetTargetProperty(danim2, new PropertyPath(ScaleTransform.ScaleYProperty));
sb.Begin();
}
К сожалению, когда я запускаю эту программу, она ничего не делает. Прямоугольник остается в 144x144. Если я покончил с анимацией, и просто
ScaleTransform scaly = new ScaleTransform(1.5, 0.5);
rect1.RenderTransform = scaly;
это удлинит его немедленно, без проблем. В другом месте существует проблема. Какие-либо предложения? Я считал обсуждение по http://www.eggheadcafe.com/software/aspnet/29220878/how-to-animate-tofrom-an.aspx, в котором кто-то, кажется, получил чистую-XAML работу версии, но код не показывают там.
Править: При Применении анимированного ScaleTransform в проблеме кода кажется, что у кого-то была очень похожая проблема, хорошо с использованием его метода, который работал, но какого черта это string thePath = "(0).(1)[0].(2)";
все о? Что представляют те числа?
Дело вот в чем, это цитата из статьи MSDN Storyboards Overview, в разделе под названием 'Where Can You Use a Storyboard?':
Storyboard можно использовать для анимирования зависимых свойств анимируемых классов (для получения дополнительной информации о о том, что делает класс анимируемым, см. Обзор анимации). Однако, поскольку раскадровка является функцией уровня каркаса функция, объект должен принадлежать к NameScope элемента FrameworkElement или FrameworkContentElement.
Это заставило меня задуматься о том, что объект ScaleTransform
не принадлежит к NameScope
какого-либо FrameworkElement
. Даже если Rectangle
является FrameworkElement
, поскольку ScaleTransform
не является частью его логических детей, а скорее значением, присвоенным какому-то другому свойству (в данном случае свойству RenderTransform
).
Чтобы обойти это, нужно указать целевой объект и PropertyPath
по-другому, таким образом:
Storyboard.SetTarget(danim1, rect1);
Storyboard.SetTargetProperty(danim1,
new PropertyPath("RenderTransform.(ScaleTransform.ScaleX)"));
Попробовал и это работает, хотя я и сам не до конца понимаю цитату из MSDN :-)
.