我有一个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 :(得分: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();
}