简体   繁体   English

C#故事板动画不会重置位置

[英]C# Storyboard animation doesn't reset position

I have generated a XAML file which contains a scrollviewer with studentnames and a graph. 我已经生成了一个XAML文件,其中包含带有学生姓名和图形的滚动查看器。 When I click on one of these names, the respective lines will fly in (grow from small to correct size aswell) from the top left and stop at the right position on the axes. 当我单击这些名称之一时,相应的行将从左上角飞来(也从小到正确的大小增长),并停在轴上的右侧位置。

When I click on another name it will trigger the same thing but when these stop at the right position, the former lines fly out of the screen and shrink down through the bottom right. 当我单击另一个名称时,它将触发相同的操作,但是当这些名称停在正确的位置时,前几行会飞出屏幕,并在右下角缩小。

This all works until I press a name I have already pressed before. 在我按之前已经按过的名称之前,所有步骤均有效。 These lines then start out small, stay small, and immediately fly out the bottom right, instead of stopping on the axes with its proper size. 然后,这些线开始时很小,保持很小,然后立即从右下角飞出,而不是停在适当大小的轴上。

I've tried stopping the animation but that doesn't seem to be working, any help would be much appreciated. 我曾尝试停止动画,但似乎无法正常工作,任何帮助将不胜感激。

private void selectStudent(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        Duration duration = new Duration(new TimeSpan(0, 0, 2));

        if (line01 != null)
        {
            line1Animation1.BeginTime = new TimeSpan(0, 0, 2);
            line1Animation1.Duration = duration;
            line1Animation1.From = line01.X1;
            line1Animation1.To = (line01.X1 * 0.1) + 800;
            line1Animation2.BeginTime = new TimeSpan(0, 0, 2);
            line1Animation2.Duration = duration;
            line1Animation2.From = line01.Y1;
            line1Animation2.To = (line01.Y1 * 0.1) + 800;
            line1Animation3.BeginTime = new TimeSpan(0, 0, 2);
            line1Animation3.Duration = duration;
            line1Animation3.From = line01.X2;
            line1Animation3.To = (line01.X2 * 0.1) + 800;
            line1Animation4.BeginTime = new TimeSpan(0, 0, 2);
            line1Animation4.Duration = duration;
            line1Animation4.From = line01.Y2;
            line1Animation4.To = (line01.Y2 * 0.1) + 800;
            storyboard1.Begin();

            line2Animation1.BeginTime = new TimeSpan(0, 0, 2);
            line2Animation1.Duration = duration;
            line2Animation1.From = line02.X1;
            line2Animation1.To = (line02.X1 * 0.1) + 800;
            line2Animation2.BeginTime = new TimeSpan(0, 0, 2);
            line2Animation2.Duration = duration;
            line2Animation2.From = line02.Y1;
            line2Animation2.To = (line02.Y1 * 0.1) + 800;
            line2Animation3.BeginTime = new TimeSpan(0, 0, 2);
            line2Animation3.Duration = duration;
            line2Animation3.From = line02.X2;
            line2Animation3.To = (line02.X2 * 0.1) + 800;
            line2Animation4.BeginTime = new TimeSpan(0, 0, 2);
            line2Animation4.Duration = duration;
            line2Animation4.From = line02.Y2;
            line2Animation4.To = (line02.Y2 * 0.1) + 800;
            storyboard2.Begin();

            line3Animation1.BeginTime = new TimeSpan(0, 0, 2);
            line3Animation1.Duration = duration;
            line3Animation1.From = line03.X1;
            line3Animation1.To = (line03.X1 * 0.1) + 800;
            line3Animation2.BeginTime = new TimeSpan(0, 0, 2);
            line3Animation2.Duration = duration;
            line3Animation2.From = line03.Y1;
            line3Animation2.To = (line03.Y1 * 0.1) + 800;
            line3Animation3.BeginTime = new TimeSpan(0, 0, 2);
            line3Animation3.Duration = duration;
            line3Animation3.From = line03.X2;
            line3Animation3.To = (line03.X2 * 0.1) + 800;
            line3Animation4.BeginTime = new TimeSpan(0, 0, 2);
            line3Animation4.Duration = duration;
            line3Animation4.From = line03.Y2;
            line3Animation4.To = (line03.Y2 * 0.1) + 800;
            storyboard3.Begin();

            line4Animation1.BeginTime = new TimeSpan(0, 0, 2);
            line4Animation1.Duration = duration;
            line4Animation1.From = line04.X1;
            line4Animation1.To = (line04.X1 * 0.1) + 800;
            line4Animation2.BeginTime = new TimeSpan(0, 0, 2);
            line4Animation2.Duration = duration;
            line4Animation2.From = line04.Y1;
            line4Animation2.To = (line04.Y1 * 0.1) + 800;
            line4Animation3.BeginTime = new TimeSpan(0, 0, 2);
            line4Animation3.Duration = duration;
            line4Animation3.From = line04.X2;
            line4Animation3.To = (line04.X2 * 0.1) + 800;
            line4Animation4.BeginTime = new TimeSpan(0, 0, 2);
            line4Animation4.Duration = duration;
            line4Animation4.From = line04.Y2;
            line4Animation4.To = (line04.Y2 * 0.1) + 800;
            storyboard4.Begin();

            titleActive.Visibility = Visibility.Collapsed;
        }

        line01 = (Line)FindName(((Border)sender).Name + "_Line_1");
        storyboard1 = (Storyboard)FindName(line01.Name + "_StoryboardLine");
        line1Animation1String = line01.Name + "_lineAnimation1";
        line1Animation1 = (DoubleAnimation)FindName(line1Animation1String);
        line1Animation2String = line01.Name + "_lineAnimation2";
        line1Animation2 = (DoubleAnimation)FindName(line1Animation2String);
        line1Animation3String = line01.Name + "_lineAnimation3";
        line1Animation3 = (DoubleAnimation)FindName(line1Animation3String);
        line1Animation4String = line01.Name + "_lineAnimation4";
        line1Animation4 = (DoubleAnimation)FindName(line1Animation4String);

        line02 = (Line)FindName(((Border)sender).Name + "_Line_2");
        storyboard2 = (Storyboard)FindName(line02.Name + "_StoryboardLine");
        line2Animation1String = line02.Name + "_lineAnimation1";
        line2Animation1 = (DoubleAnimation)FindName(line2Animation1String);
        line2Animation2String = line02.Name + "_lineAnimation2";
        line2Animation2 = (DoubleAnimation)FindName(line2Animation2String);
        line2Animation3String = line02.Name + "_lineAnimation3";
        line2Animation3 = (DoubleAnimation)FindName(line2Animation3String);
        line2Animation4String = line02.Name + "_lineAnimation4";
        line2Animation4 = (DoubleAnimation)FindName(line2Animation4String);

        line03 = (Line)FindName(((Border)sender).Name + "_Line_3");
        storyboard3 = (Storyboard)FindName(line03.Name + "_StoryboardLine");
        line3Animation1String = line03.Name + "_lineAnimation1";
        line3Animation1 = (DoubleAnimation)FindName(line3Animation1String);
        line3Animation2String = line03.Name + "_lineAnimation2";
        line3Animation2 = (DoubleAnimation)FindName(line3Animation2String);
        line3Animation3String = line03.Name + "_lineAnimation3";
        line3Animation3 = (DoubleAnimation)FindName(line3Animation3String);
        line3Animation4String = line03.Name + "_lineAnimation4";
        line3Animation4 = (DoubleAnimation)FindName(line3Animation4String);

        line04 = (Line)FindName(((Border)sender).Name + "_Line_4");
        storyboard4 = (Storyboard)FindName(line04.Name + "_StoryboardLine");
        line4Animation1String = line04.Name + "_lineAnimation1";
        line4Animation1 = (DoubleAnimation)FindName(line4Animation1String);
        line4Animation2String = line04.Name + "_lineAnimation2";
        line4Animation2 = (DoubleAnimation)FindName(line4Animation2String);
        line4Animation3String = line04.Name + "_lineAnimation3";
        line4Animation3 = (DoubleAnimation)FindName(line4Animation3String);
        line4Animation4String = line04.Name + "_lineAnimation4";
        line4Animation4 = (DoubleAnimation)FindName(line4Animation4String);

        titleActive = (TextBlock)FindName(((Border)sender).Name + "_Title");

        line1Animation1.Duration = duration;
        line1Animation1.From = (line01.X1 - 250) * 0.1;
        line1Animation1.To = line01.X1;
        line1Animation2.Duration = duration;
        line1Animation2.From = (line01.Y1 - 250) * 0.1;
        line1Animation2.To = line01.Y1;
        line1Animation3.Duration = duration;
        line1Animation3.From = (line01.X2 - 250) * 0.1;
        line1Animation3.To = line01.X2;
        line1Animation4.Duration = duration;
        line1Animation4.From = (line01.Y2 - 250) * 0.1;
        line1Animation4.To = line01.Y2;
        storyboard1.Begin();

        line2Animation1.Duration = duration;
        line2Animation1.From = (line02.X1 - 250) * 0.1;
        line2Animation1.To = line02.X1;
        line2Animation2.Duration = duration;
        line2Animation2.From = (line02.Y1 - 250) * 0.1;
        line2Animation2.To = line02.Y1;
        line2Animation3.Duration = duration;
        line2Animation3.From = (line02.X2 - 250) * 0.1;
        line2Animation3.To = line02.X2;
        line2Animation4.Duration = duration;
        line2Animation4.From = (line02.Y2 - 250) * 0.1;
        line2Animation4.To = line02.Y2;
        storyboard2.Begin();

        line3Animation1.Duration = duration;
        line3Animation1.From = (line03.X1 - 250) * 0.1;
        line3Animation1.To = line03.X1;
        line3Animation2.Duration = duration;
        line3Animation2.From = (line03.Y1 - 250) * 0.1;
        line3Animation2.To = line03.Y1;
        line3Animation3.Duration = duration;
        line3Animation3.From = (line03.X2 - 250) * 0.1;
        line3Animation3.To = line03.X2;
        line3Animation4.Duration = duration;
        line3Animation4.From = (line03.Y2 - 250) * 0.1;
        line3Animation4.To = line03.Y2;
        storyboard3.Begin();

        line4Animation1.Duration = duration;
        line4Animation1.From = (line04.X1 - 250) * 0.1;
        line4Animation1.To = line04.X1;
        line4Animation2.Duration = duration;
        line4Animation2.From = (line04.Y1 - 250) * 0.1;
        line4Animation2.To = line04.Y1;
        line4Animation3.Duration = duration;
        line4Animation3.From = (line04.X2 - 250) * 0.1;
        line4Animation3.To = line04.X2;
        line4Animation4.Duration = duration;
        line4Animation4.From = (line04.Y2 - 250) * 0.1;
        line4Animation4.To = line04.Y2;
        storyboard4.Begin();

        line01.Visibility = Visibility.Visible;
        line02.Visibility = Visibility.Visible;
        line03.Visibility = Visibility.Visible;
        line04.Visibility = Visibility.Visible;
        titleActive.Visibility = Visibility.Visible;
    }
}

XAML: (lines from 1 person, couldn't fit whole file) XAML:(1人的行,不能容纳整个文件)

<Line Stroke="Darkgreen" StrokeThickness="2" X1="212.97500000000002" X2="350.0" Y1="350.0" Y2="190.53124999999997" x:Name="Marilyn_Williamson_Line_1" Visibility="Collapsed">
      <Line.Triggers>
        <EventTrigger>
          <BeginStoryboard>
            <Storyboard x:Name="Marilyn_Williamson_Line_1_StoryboardLine">
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_1_lineAnimation1" Storyboard.TargetName="Marilyn_Williamson_Line_1" Storyboard.TargetProperty="X1" />
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_1_lineAnimation2" Storyboard.TargetName="Marilyn_Williamson_Line_1" Storyboard.TargetProperty="Y1" />
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_1_lineAnimation3" Storyboard.TargetName="Marilyn_Williamson_Line_1" Storyboard.TargetProperty="X2" />
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_1_lineAnimation4" Storyboard.TargetName="Marilyn_Williamson_Line_1" Storyboard.TargetProperty="Y2" />
            </Storyboard>
          </BeginStoryboard>
        </EventTrigger>
      </Line.Triggers>
    </Line>
    <Line Stroke="Darkgreen" StrokeThickness="2" X1="509.86249999999995" X2="350.0" Y1="350.0" Y2="190.53124999999997" x:Name="Marilyn_Williamson_Line_2" Visibility="Collapsed">
      <Line.Triggers>
        <EventTrigger>
          <BeginStoryboard>
            <Storyboard x:Name="Marilyn_Williamson_Line_2_StoryboardLine">
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_2_lineAnimation1" Storyboard.TargetName="Marilyn_Williamson_Line_2" Storyboard.TargetProperty="X1" />
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_2_lineAnimation2" Storyboard.TargetName="Marilyn_Williamson_Line_2" Storyboard.TargetProperty="Y1" />
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_2_lineAnimation3" Storyboard.TargetName="Marilyn_Williamson_Line_2" Storyboard.TargetProperty="X2" />
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_2_lineAnimation4" Storyboard.TargetName="Marilyn_Williamson_Line_2" Storyboard.TargetProperty="Y2" />
            </Storyboard>
          </BeginStoryboard>
        </EventTrigger>
      </Line.Triggers>
    </Line>
    <Line Stroke="Darkgreen" StrokeThickness="2" X1="350.0" X2="212.97500000000002" Y1="487.025" Y2="350.0" x:Name="Marilyn_Williamson_Line_3" Visibility="Collapsed">
      <Line.Triggers>
        <EventTrigger>
          <BeginStoryboard>
            <Storyboard x:Name="Marilyn_Williamson_Line_3_StoryboardLine">
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_3_lineAnimation1" Storyboard.TargetName="Marilyn_Williamson_Line_3" Storyboard.TargetProperty="X1" />
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_3_lineAnimation2" Storyboard.TargetName="Marilyn_Williamson_Line_3" Storyboard.TargetProperty="Y1" />
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_3_lineAnimation3" Storyboard.TargetName="Marilyn_Williamson_Line_3" Storyboard.TargetProperty="X2" />
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_3_lineAnimation4" Storyboard.TargetName="Marilyn_Williamson_Line_3" Storyboard.TargetProperty="Y2" />
            </Storyboard>
          </BeginStoryboard>
        </EventTrigger>
      </Line.Triggers>
    </Line>
    <Line Stroke="Darkgreen" StrokeThickness="2" X1="509.86249999999995" X2="350.0" Y1="350.0" Y2="487.025" x:Name="Marilyn_Williamson_Line_4" Visibility="Collapsed">
      <Line.Triggers>
        <EventTrigger>
          <BeginStoryboard>
            <Storyboard x:Name="Marilyn_Williamson_Line_4_StoryboardLine">
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_4_lineAnimation1" Storyboard.TargetName="Marilyn_Williamson_Line_4" Storyboard.TargetProperty="X1" />
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_4_lineAnimation2" Storyboard.TargetName="Marilyn_Williamson_Line_4" Storyboard.TargetProperty="Y1" />
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_4_lineAnimation3" Storyboard.TargetName="Marilyn_Williamson_Line_4" Storyboard.TargetProperty="X2" />
              <DoubleAnimation x:Name="Marilyn_Williamson_Line_4_lineAnimation4" Storyboard.TargetName="Marilyn_Williamson_Line_4" Storyboard.TargetProperty="Y2" />
            </Storyboard>
          </BeginStoryboard>
        </EventTrigger>
      </Line.Triggers>
    </Line>

1 - Use completed event to stop or remove storyboards like this: 1-使用完成的事件来停止或删除故事板,如下所示:

 <Storyboard Completed="storyboard_Completed" x:Name="Marilyn_Williamson_Line_1_StoryboardLine">

and in code behind : 并在后面的代码中:

 private void storyboard_Completed(object sender, EventArgs e)
    {
        string StoryBoardName = ((ClockGroup)sender).Timeline.Name;
        if (StoryBoardName == "storyboard1") { storyboard1.Stop(); storyboard1.Remove(); }
    }

2 - Put storyboard.Stop(); 2-放置storyboard.Stop(); before each storyboard.Begin(); 在每个storyboard.Begin();之前storyboard.Begin();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM