У меня есть UniformGrid, который содержит пучок кнопок, и когда UniformGrid сначала отображает его, он циклически запускает анимацию каждой кнопки. Все это прекрасно работает, но когда пользователь нажимает определенную кнопку, все кнопки удаляются из сетки, а некоторые новые создаются и снова анимируются.Проблема с анимацией кнопки, созданной во время выполнения
Вот как я создаю кнопки в коде
int ModelsAnimateIndex = 0; // Index of button to animate
private void GetModels()
{
DirectoryInfo di = new DirectoryInfo(Globals.ModelsPath);
FileInfo[] fis = di.GetFiles();
// ugModels is the UniformGrid
switch (fis.Length)
{
case 1:
ugModels.Rows = 1;
ugModels.Columns = 1;
break;
case 2:
ugModels.Rows = 1;
ugModels.Columns = 2;
break;
case 3:
case 4:
ugModels.Rows = 2;
ugModels.Columns = 2;
break;
case 5:
case 6:
ugModels.Rows = 2;
ugModels.Columns = 3;
break;
case 7:
case 8:
case 9:
ugModels.Rows = 3;
ugModels.Columns = 3;
break;
default:
break;
}
foreach (FileInfo s in fis)
{
ugModels.Children.Add(new Button()
{
Background = ThemeColour, // SolidBrush
Foreground = new SolidColorBrush(Colors.White),
Name = "btn" + s.Name.Split('.')[0].Replace(" ",""),
Style = MainButtonStyle, // Button Style
Content = s.Name.Split('.')[0]
});
}
}
и теперь нажатие кнопки событий, которая начинается анимация вновь созданных кнопок
private void btnModelSelect_Click(object sender, System.Windows.RoutedEventArgs e)
{
// TODO: Add event handler implementation here.
sbShowMenuButton.Completed += new EventHandler(sbShowModels_Completed);
Storyboard.SetTargetName(sbShowMenuButton.Children[0], ((Button)ugModels.Children[ModelsAnimateIndex]).Name);
Storyboard.SetTargetName(sbShowMenuButton.Children[1], ((Button)ugModels.Children[ModelsAnimateIndex]).Name);
Storyboard.SetTargetName(sbShowMenuButton.Children[2], ((Button)ugModels.Children[ModelsAnimateIndex]).Name);
sbShowMenuButton.Begin((Button)ugModels.Children[ModelsAnimateIndex]); // Error is here
}
Когда первая кнопка пытается оживить я получаю следующая ошибка
Имя «btnTestModel» не может быть найдено в области имен «System.Windows.Controls.Button».
Попробуйте использовать SetTarget вместо SetTargetName. У вас есть ссылка на объект в любом случае, поэтому зачем WPF искать его? –
При переходе на SetTarget в Begin появляется следующая ошибка. Свойство [Unknown] 'не указывает на DependencyObject в пути' (0). (1) [0]. (2) '. – Gaz83