Estoy jugando con Storyboards en una aplicación Metro XAML. Tengo que crear un Storyboard
en el código. Me gustaría establecer el Storyboard.TargetProperty
a CompositeTransform.Rotation
No se puede establecer Storyboard.TargetProperty en CompositeTransform.Rotation en la aplicación de estilo Metro desde el código
Parece imposible ...
Mi Storyboard en XAML se ve así:
<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>
me gustaría crear algo similar.
Importante: No estoy tratando de recrear este Storyboard exacto. Estoy dentro del código de un ContentControl
personalizado, así que this
es el Control
, y no hay una "cuadrícula" para apuntar a la animación. El objetivo es el control en sí, que tiene CompositeTransform
previamente establecido.
Mi código hasta ahora es así:
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();
Tan pronto como llega el método Begin consigo una excepción diciendo que (CompositeTransform.Rotation) no puede ser resuelto. Así que supongo que no obtuve el camino correcto. He intentado diferentes variaciones, pero de acuerdo con PropertyPaths, esta debería ser la correcta, ¿no es así? : S
Si esto es un problema sin solución, estoy abierto a sugerencias sobre una solución ...
EDIT:
Creo que he resuelto el problema por el momento. Aunque tengo algunos hallazgos interesantes ...
Si hago un UserControl, puedo hacer prácticamente cualquier cosa. Todo funciona, puedo configurar Storyboard.Targetproperty, y la animación se reproduce correctamente.
Sin embargo, si uso un control personalizado o heredo de otro control (digamos ContentControl), no puedo iniciar un Storyboard desde el código, solo en algunos casos.
Por ejemplo: si hago un guión gráfico (definido en XAML) para animar la rotación (o cualquier propiedad de transformación para ese caso) e intento iniciar desde el código, obtengo la excepción anterior. Pero si animo una propiedad simple, digamos Opacidad, funciona bien.
(Hice lo mismo con un UserControl, y funcionó.)
¿Alguien puede explicar esto?
estoy teniendo el mismo problema, tener una clase herede del control de cuadrícula, guiones gráficos, simplemente ganó' comenzar –
Una cosa a tener en cuenta es que Grid no se hereda de Control, por lo que no es realmente un control personalizado que está creando. –
No estaba usando Grid, heredaba de ContentControl. El xaml era de un intento anterior, donde tenía un UserControl que tenía una Grilla, y ese era el objetivo de la animación. Pero en cuanto a esta situación, el objetivo debería ser el control en sí mismo. Lo cual, si lo lees cuidadosamente, lo describí en la sección "Importante". – Tenshiko