Не удается установить для Storyboard.TargetProperty значение CompositeTransform.Rotation в приложении в стиле Metro из кода

Я возился с некоторыми раскадровками в приложении 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, и это сработало.)

Кто-нибудь может это объяснить?

5
задан Tenshiko 18 August 2012 в 19:30
поделиться