2012-04-11 2 views
0

У меня есть 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».

+0

Попробуйте использовать SetTarget вместо SetTargetName. У вас есть ссылка на объект в любом случае, поэтому зачем WPF искать его? –

+0

При переходе на SetTarget в Begin появляется следующая ошибка. Свойство [Unknown] 'не указывает на DependencyObject в пути' (0). (1) [0]. (2) '. – Gaz83

ответ

0

Я решил свою проблему. Мне нужно было создать RenderTransform на кнопках, созданных так.

foreach (FileInfo s in fis) 
     { 
      ugModels.Children.Add(new Button() 
      { 
       Background = ThemeColour, 
       //   This Fixed the problem   // 
       RenderTransform = new TransformGroup() 
       { 
        Children = new TransformCollection() 
        { 
         new ScaleTransform(), 
         new SkewTransform(), 
         new RotateTransform(), 
         new TranslateTransform() 
        } 
       },     
       //////////////////////////////////////////////// 
       BorderBrush = null, 
       Foreground = new SolidColorBrush(Colors.White), 
       Name = "btn" + s.Name.Split('.')[0].Replace(" ", ""), 
       Margin = new Thickness(12, 12, 12, 12), 
       FontSize = 48, 
       Style = MainButtonStyle, 
       Content = s.Name.Split('.')[0] 
      }); 
     }  

благодаря Мэтта предложение приемлемо, я также изменил настройки раскадровка

private void btnMenu_Click(object sender, System.Windows.RoutedEventArgs e) 
    { 
     sbShowMenuButton.Completed += new EventHandler(sbShowModels_Completed); 
     Storyboard.SetTarget(sbShowMenuButton, ((Button)ugModels.Children[ModelsAnimateIndex]));    
     sbShowMenuButton.Begin(); 
    } 
Смежные вопросы