2012-04-11 4 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 
    } 

は、最初のボタンは、私が手アニメーション化しようとすると、新しく作成されたボタンをアニメーションを開始するボタンクリックイベントを作成する方法であります次のエラー

'System.Windows.Controls.Button'の名前スコープに 'btnTestModel'の名前が見つかりません。

+0

がSetTargetNameの代わりにがsetTargetを使用してみてください設定を変更します。とにかくオブジェクトへの参照があるので、なぜWPFを参照する必要がありますか? –

+0

SetTargetに変更するとBeginで次のエラーが発生します。 '[Unknown]'プロパティはパス '(0)。(1)[0]。(2)'のDependencyObjectを指していません。 – Gaz83

答えて

0

私は私の問題を解決しました。私はそのように作成されたボタンにRenderTransformを作成する必要がありました。 Mattの暗示に

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(); 
    } 
関連する問題