DoubleAnimation в ScaleTransform

Я пытаюсь, как выставка, использовать 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)"; все о? Что представляют те числа?

6
задан Community 23 May 2017 в 11:53
поделиться

1 ответ

Дело вот в чем, это цитата из статьи 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 :-)

.
7
ответ дан 17 December 2019 в 00:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: