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' の名前スコープで見つかりません。

4

1 に答える 1

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();
    } 
于 2012-04-12T08:42:42.837 に答える