У меня возникли проблемы с переносом некоторых методов анимации из WinRT в WPF.Анимация ScaleTransform сетки внутри UserControl программно в WPF
У меня есть сетка внутри UserControl, и я в основном хочу масштабировать сетку, уменьшая ее непрозрачность, а затем масштабирую ее обратно, при этом ее непрозрачность возвращается в нормальное состояние.
Это часть XAML в UserControl:
<Grid x:Name="myGrid">
<Grid.RenderTransform>
<ScaleTransform x:Name="scaleTransform"/>
</Grid.RenderTransform>
<!--Stuff here-->
</Grid>
И я получаю эти объекты в коде с этими двумя свойствами в файле .cs в UserControl:
public Grid MyGrid
{
get
{
return myGrid;
}
}
public ScaleTransform GridScaleTransform
{
get
{
return scaleTransform;
}
}
сейчас , У меня есть статический класс с методами, которые я использую для управления анимациями.
Мне нужно создать раскадровку с непрозрачностью и масштабированием анимации, а затем вернуть ее, чтобы я мог добавить некоторые обработчики в свое закрытое событие, а затем запустить его.
Это статический метод, который не работает должным образом:
private static Storyboard createGridAnimation(MyUserControl element, double fromScale, double toScale, bool animIn = false)
{
Storyboard storyboard = new Storyboard();
//Add the opacity animation only if the animation is the one that scales up the grid
if (animIn)
{
DoubleAnimationUsingKeyFrames opacityAnim= new DoubleAnimationUsingKeyFrames();
opacityAnim.Duration = new Duration(TimeSpan.FromMilliseconds(200));
//Some keyframes here...
Storyboard.SetTarget(opacityAnim, element.MyGrid);
Storyboard.SetTargetProperty(opacityAnim, new PropertyPath(UIElement.OpacityProperty));
storyboard.Children.Add(opacityAnim);
}
//Scale X
DoubleAnimation scaleXAnimation = new DoubleAnimation() { From = fromScale, To = 2.0, AutoReverse = false };
scaleXAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(100));
Storyboard.SetTarget(scaleXAnimation, element.GridScaleTransform);
Storyboard.SetTargetProperty(scaleXAnimation, new PropertyPath(ScaleTransform.ScaleXProperty));
//Scale Y
DoubleAnimation scaleYAnimation = new DoubleAnimation() { From = fromScale, To = 2.0, AutoReverse = false };
scaleXAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(100));
Storyboard.SetTarget(scaleYAnimation, elemento.GridScaleTransform);
Storyboard.SetTargetProperty(scaleYAnimation, new PropertyPath(ScaleTransform.ScaleYProperty));
storyboard.Children.Add(scaleXAnimation);
storyboard.Children.Add(scaleYAnimation);
return storyboard;
}
Проблема заключается в том, что единственная анимация, которая работает в непрозрачности анимации, два ScaleTransform doubleAnimations просто не заводятся. Я читал, что могу попробовать использовать свойство SetTargetName, но так как я внутри статического метода, и у меня есть только ссылка на целевой UIElement, он не работает (по крайней мере, мне не удалось заставить его работать путь).
Что не так с этим кодом?
Спасибо!
Sergio
Спасибо, это работает! Я просто пропустил это: если я попытаюсь программно получить свойство ScaleY, я не могу его увидеть, почему? Я имею в виду, элемент .MyGrid.RenderTransform не имеет свойства ScaleX или ScaleY, поэтому как этот PropertyPath может работать в Double Animation? Еще раз спасибо! – Sergio0694