麻烦动画在运行时创建的按钮

时间:2012-04-11 13:54:20

标签: c# wpf

我有一个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'名称。

1 个答案:

答案 0 :(得分: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();
    }