J'essaie, en tant qu'exposition, d'utiliser une DoubleAnimation sur les propriétés ScaleX et ScaleY d'une ScaleTransform. J'ai un rectangle (144x144) que je veux faire rectangulaire sur cinq secondes.DoubleAnimation dans ScaleTransform
Mon XAML:
<Window x:Class="ScaleTransformTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
<Grid>
<Rectangle Name="rect1" Width="144" Height="144" Fill="Aqua">
<Rectangle.RenderTransform>
<ScaleTransform ScaleX="1" ScaleY="1" />
</Rectangle.RenderTransform>
</Rectangle>
</Grid>
</Window>
Mon 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();
}
Malheureusement, quand je lance ce programme, il ne fait rien. Le rectangle reste à 144x144. Si je supprime l'animation, et juste
ScaleTransform scaly = new ScaleTransform(1.5, 0.5);
rect1.RenderTransform = scaly;
il s'allongera instantanément, pas de problème. Il y a un problème ailleurs. Aucune suggestion? J'ai lu la discussion au http://www.eggheadcafe.com/software/aspnet/29220878/how-to-animate-tofrom-an.aspx dans lequel quelqu'un semble avoir une version pure-XAML fonctionnant, mais le code n'est pas montré là.
EDIT: Au Applying animated ScaleTransform in code problem il semble que quelqu'un a eu un problème très similaire, je suis d'accord avec l'utilisation de sa méthode qui a fonctionné, mais qu'est-ce que c'est que le string thePath = "(0).(1)[0].(2)";
? Que représentent ces chiffres?
En fait, j'obtiens cette erreur: Impossible de résoudre toutes les références de propriété dans le chemin de propriété 'RenderTransform. (ScaleTransform.ScaleX)'. Vérifiez que les objets applicables prennent en charge les propriétés. Êtes-vous sûr de copier/coller correctement votre code de travail? –
Je ne sais pas, j'ai trouvé une erreur de copier/coller que j'ai corrigée il y a 17 minutes. –
Ça ne fonctionne toujours pas pour vous? Je vous assure, il le fait pour moi sur .NET 4 avec VS2010. –