c# - 尝试为一组线条设置动画

标签 c# wpf

我正在制作一个类似这样的图案......

Hexagon Pattern

通过按线阵列启动 Storyboard并执行计算。虽然,我无法确定如何同时启动多行动画。

这是我到目前为止尝试过的:

Canvas canMain = new Canvas();
canMain.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
canMain.Margin = new Thickness(50, 0, 0, 0);
Line[] line = new Line[6];
Storyboard sb;
DoubleAnimation da, da1;
for (int i = 0; i < line.Count(); i++)
{
    line[i].Stroke = Brushes.Red;
    line[i].StrokeThickness = 1;
    line[i].X1 = i+11;
    line[i].Y1 = i+11;
    canMain.Children.Add(line[i]);
    sb = new Storyboard();
    da = new DoubleAnimation(line[i].Y1, 30, new Duration(TimeSpan.FromSeconds(0.5)));
    da1 = new DoubleAnimation(line[i].X1, 30, new Duration(TimeSpan.FromSeconds(0.5)));
    Storyboard.SetTargetProperty(da, new PropertyPath("(Line.Y2)"));
    Storyboard.SetTargetProperty(da1, new PropertyPath("(Line.X2)"));
    sb.Children.Add(da);
    sb.Children.Add(da1);
    line[i].BeginStoryboard(sb);
}

如您所知,我还没有开始计算它背后的原因,因为我似乎无法同时触发所有 Storyboard。还是我应该将所有 doubleAnimations 存储到同一个 Storyboard 中?这两种方法都让我得到了 stackoverflow。我对 WPF C# 编程比较陌生,所以任何建议或进一步的信息都会非常有帮助。

编辑帖子以包含异常(exception)情况:

PresentationFramework.dll 中发生类型为“System.Reflection.TargetInvocationException”的未处理异常

附加信息:调用的目标抛出了异常。

最佳答案

您的代码基本没问题。我只需要做一个小改动就可以让它工作。我创建了一个名为 new_Window 的新窗口来进行测试,并在其上创建了一个名为 canMainCanvas 对象。 然后我向你的代码添加了一行代码:在你的 for 循环中我不得不添加 line[i] = new Line(); 因为行对象在那个点。

  public new_Window()
  {
     InitializeComponent();
     AnimateThis();
  }

  private void AnimateThis()
  {
     canMain.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
     canMain.Margin = new Thickness(50, 0, 0, 0);
     Line[] line = new Line[6];
     Storyboard sb;
     DoubleAnimation da, da1;
     for (int i = 0; i < line.Count(); i++)
     {
        line[i] = new Line();
        line[i].Stroke = Brushes.Red;
        line[i].StrokeThickness = 1;
        line[i].X1 = i+11;
        line[i].Y1 = i+11;
        canMain.Children.Add(line[i]);
        sb = new Storyboard();
        da = new DoubleAnimation(line[i].Y1, 30, new Duration(TimeSpan.FromSeconds(0.5)));
        da1 = new DoubleAnimation(line[i].X1, 30, new Duration(TimeSpan.FromSeconds(0.5)));
        Storyboard.SetTargetProperty(da, new PropertyPath("(Line.Y2)"));
        Storyboard.SetTargetProperty(da1, new PropertyPath("(Line.X2)"));
        sb.Children.Add(da);
        sb.Children.Add(da1);
        line[i].BeginStoryboard(sb);
     }
  }

我首先将 Canvas 添加到窗口,因为我想确保有一个表面准备好进行渲染。

关于c# - 尝试为一组线条设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25856663/

相关文章:

c# - Wpf 数据网格 : how to detect the set of visible cells?

c# - 为什么双击滚动条时会触发 DataGrid MouseDoubleClick 事件?

带参数的 C# 服务 onCustomCommand?

c# - .Net 中的多个 Parallel.ForEach 循环

c# - 静态文件中间件应该在 ASP.NET Core 管道中的什么位置?

c# - 在我的 WPF 应用程序中捕获没有焦点的按键事件

c# - 我应该使用什么 WPF 控件来构建高性能网格?

wpf - 如何使 WPF 文本框使用密码字符?

c# - 在asp.net中从JS文件调用javascript函数

c# - 如何打开测试项目代码文件夹中的文件? (Visual Studio 2008 和 .NET C#)