HubPage - моя целевая страница. На Hubpage.xaml у меня есть сетка 3x3, содержащая Rectangle, что я называю «ячейкой». В, HubPage.xaml.cs частности в HubPage() конструктор, создать раскадровку для каждой ячейки:Как добавить анимацию раскадровки в ресурсы страницы на C#, а затем вызвать ее позже?
CreateStoryboardForCell("Column0Row0");
CreateStoryboardForCell("Column0Row1");
...
CreateStoryboardForCell("Column2Row2");
Хочу добавить раскадровку к Page.Resources обычно я хотел бы сделать это в XAML, но я пытаюсь это сделать с C#. Теперь, здесь реализация CreateStoryboardForCell:
private void CreateStoryboardForCell(string cellName)
{
// Create two DoubleAnimations, one for scaleX and one for scaleY, and set their properties.
Duration duration = new Duration(TimeSpan.FromSeconds(0.2));
DoubleAnimation myDoubleAnimation1 = new DoubleAnimation();
DoubleAnimation myDoubleAnimation2 = new DoubleAnimation();
myDoubleAnimation1.Duration = duration;
myDoubleAnimation2.Duration = duration;
Storyboard sb = new Storyboard();
sb.Duration = duration;
sb.Children.Add(myDoubleAnimation1);
sb.Children.Add(myDoubleAnimation2);
// Set the targets of the animations
Storyboard.SetTarget(myDoubleAnimation1, Column0Row0);
Storyboard.SetTarget(myDoubleAnimation2, Column0Row0);
// Set the attached properties of ScaleX and ScaleY
// to be the target properties of the two respective DoubleAnimations
Storyboard.SetTargetProperty(myDoubleAnimation1, "(UIElement.RenderTransform).(CompositeTransform.ScaleX)");
Storyboard.SetTargetProperty(myDoubleAnimation2, "(UIElement.RenderTransform).(CompositeTransform.ScaleY)");
myDoubleAnimation1.To = 15;
myDoubleAnimation2.To = 22;
// Make the Storyboard a resource.
try
{
pageRoot.Resources.Add("story" + cellName, sb);
}
catch (Exception e)
{
Status.Text = "Error adding storyboard resource for cell" + cellName + ": " + e.Message;
}
}
pageRoot от Hubpage.xaml: Page х: Name = «pageRoot» и т.д. Я не получаю исключение при добавлении ресурса, но я не могу видеть ресурс когда я устанавливаю точку останова, поэтому я предполагаю, что она была добавлена успешно, поскольку я могу видеть увеличение счетчика, и никаких исключений не было.
Перемещение, у меня есть обработчик клика для каждой ячейки столбца, где я делаю вывод номера строки и столбца и пытаюсь запустить соответствующую раскадровку, добавленную ранее на ресурс страницы. Вот код:
private void Column1_Cell_Click(object sender, RoutedEventArgs e)
{
Rectangle rect = sender as Rectangle;
int x = (int)rect.GetValue(Grid.RowProperty);
int y = (int)rect.GetValue(Grid.ColumnProperty);
string storyboardName = "storyColumn" + y + "Row" + x;
Storyboard storyboard = (Storyboard)FindName(storyboardName);
storyboard.Begin();
}
но вызов FindName всегда возвращает нужный раскадровки. Что мне здесь не хватает?
Если у вас есть другие проблемы. Я пытаюсь помочь – MLElyakan
Ошибка, которую я получаю, это «Windows.UI.Xaml.Media.ScaleTransform 'не содержит определения для «BeginAnimation» и не может быть найден метод расширения «BeginAnimation», принимающий первый аргумент типа «Windows.UI.Xaml.Media.ScaleTransform» (вам не хватает директивы использования или ссылки на сборку?). Я думаю, что это WPF, и мне нужно приложение Windows Store. – Freakishly
BeginAnimation не работает для меня, но вы задали мне правильный путь, поэтому я отмечаю это как ответ. То, что я делал неправильно: сохранение другого StoryBoard для каждой цели в App.Current.Resources, а затем поиск по каждому целевому (Rectangle) клику. Вместо этого я перехватываю щелчок, создаю StoryBoard на лету, и он работает как шарм :) – Freakishly