Я возился с некоторыми раскадровками в приложении Metro XAML. Мне нужно создать Storyboard
в коде. Я хотел бы установить Storyboard.TargetProperty
наCompositeTransform.Rotation
Кажется невозможным...
Моя раскадровка в XAML выглядит так:
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="grid">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="60"/
</DoubleAnimationUsingKeyFrames>
</Storyboard>
Я хотел бы создать что-то подобное.
Важно:Я не пытаюсь воссоздать именно эту раскадровку. Я нахожусь внутри кода пользовательского ContentControl
, поэтому this
— это Control
, и нет «сетки», на которую можно нацелить анимацию. Целью является сам элемент управления, для которого ранее был установлен CompositeTransform
.
Мой код пока такой:
var turnSB = new Storyboard();
var doubleAnim = new DoubleAnimationUsingKeyFrames();
doubleAnim.KeyFrames.Add(new EasingDoubleKeyFrame() { KeyTime = TimeSpan.FromMilliseconds(0), Value = currentAngle });
doubleAnim.KeyFrames.Add(new EasingDoubleKeyFrame() { KeyTime = TimeSpan.FromMilliseconds(500), Value = targetAngle });
turnSB.Children.Add(doubleAnim);
Storyboard.SetTarget(doubleAnim, this.RenderTransform);
Storyboard.SetTargetProperty(doubleAnim, "(CompositeTransform.Rotation)");
turnSB.Begin();
Как только он попадает в метод Begin, я получаю исключение, говорящее, что (CompositeTransform.Rotation )не может быть разрешено. Итак, я предполагаю, что не совсем правильно понял путь к свойству.Я пробовал разные варианты, но, согласно PropertyPaths, этот должен быть правильным, не так ли? :С
Если это неразрешимая проблема, я открыт для предложений по обходному пути...
РЕДАКТИРОВАТЬ:
Я думаю, что я решил проблему на данный момент. Но у меня есть интересные находки...
Если я создаю UserControl, я могу делать практически все. Все работает, я могу установить свойство Storyboard.Target, и анимация воспроизводится правильно.
Однако, если я использую пользовательский элемент управления или наследую от другого элемента управления (, скажем, ContentControl ), я не могу запустить раскадровку из кода, только в некоторых случаях.
Например, :Если я создам раскадровку (, определенную в XAML ), для анимации вращения (или любого другого свойства преобразования в этом отношении )и попытаюсь начать с кода, я получу указанное выше исключение. Но если я анимирую простое свойство, скажем, непрозрачность, оно работает нормально.
(Я сделал то же самое с UserControl, и это сработало.)
Кто-нибудь может это объяснить?