Запуск анимации XAML в WPF



Я использую это в качестве основы, чтобы сделать анимацию начать использовать код позади. Исходя из содержания статьи, у меня есть следующее:



<Window.Resources>
<Storyboard x:Key="sbdLabelRotation">
<DoubleAnimation
Storyboard.TargetName="lblHello"
Storyboard.TargetProperty="(TextBlock.RenderTransform).(RotateTransform.Angle)"
From="0"
To="360"
Duration="0:0:0.5"
RepeatBehavior="4x" />
</Storyboard>

</Window.Resources>


У меня есть следующий XAML (очевидно):



    <Label x:Name="lblHello" Content="test" Margin="20"/>


И код за ним:



public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

public void AnimateLabelRotation()
{
Storyboard sbdLabelRotation = (Storyboard)FindResource("sbdLabelRotation");

sbdLabelRotation.Begin(this);
}


Который я вызываю из события нажатия кнопки. FindResource работает и находит раскадровку, но ничего не происходит. Мне удалось заставить анимацию работать на триггере события, но очевидно, что я упускаю что-то для кода позади.

680   2  

2 ответов:

Это:

<Label x:Name="lblHello" Content="test" Margin="20"/>

И это:

Storyboard.TargetProperty="(TextBlock.RenderTransform).(RotateTransform.Angle)"

Несовместимы.

Когда анимация пытается найти свойство для анимации, она переходит к (TextBlock.RenderTransform) и находит null, так как вы его не объявляли (на самом деле это не так, поскольку вы говорите TextBlock, но применяете его к Label, подробнее об этом позже в ответе). Таким образом, он не может найти .(RotateTransform.Angle).

Чтобы исправить проблему:

<Label x:Name="lblHello"
        Content="test"
        Margin="20"
        RenderTransformOrigin="0.5,0.5">
    <Label.RenderTransform>
        <RotateTransform />
    </Label.RenderTransform>
</Label>

Обратите внимание RenderTransformOrigin установка-это означает, что ось вращения будет находиться в центре объекта (X и Год).

Кроме того, в анимации это должно быть:

Storyboard.TargetProperty="(Label.RenderTransform).(RotateTransform.Angle)"

Есть ссылка для загрузки всего проекта http://www.galasoft.ch/mydotnet/articles/resources/article-2006102701/GalaSoftLb.Article2006102701.zip

Вы можете изучить код и увидеть, как он работает. Иногда это более полезно. Также в вашем коде часть:

sbdLabelRotation.Begin(this);

Может ошибаться. Как вы знаете, ключевое слово this ссылается на сам класс, в вашем случае на класс MainWindow. Вы должны попробовать без этого ключевого слова.

Comments

    Ничего не найдено.