C# 以特定的时间间隔添加动画
我对动画比较陌生,所以我在寻找一些方向。假设我有一个C# 以特定的时间间隔添加动画,c#,wpf,animation,C#,Wpf,Animation,我对动画比较陌生,所以我在寻找一些方向。假设我有一个列表,其中加载了15个标签。我有DoubleAnimation,它可以在500毫秒内将不透明度设置为0到1的动画。我想循环,这些标签每1000毫秒开始一次动画。所以label1从0毫秒开始,label2从1000毫秒开始,等等 我知道我可以将故事板的持续时间设置为1000ms*15,然后将我的标签添加到SB并开始,但动画播放的速度与添加到SB的速度一样快。有没有办法在特定的时间间隔向SB添加动画 编辑: 我不再使用列表 这是我写的代码 clas
列表
,其中加载了15个标签。我有DoubleAnimation
,它可以在500毫秒内将不透明度设置为0到1的动画。我想循环,这些标签每1000毫秒开始一次动画。所以label1从0毫秒开始,label2从1000毫秒开始,等等
我知道我可以将故事板的持续时间设置为1000ms*15,然后将我的标签添加到SB并开始,但动画播放的速度与添加到SB的速度一样快。有没有办法在特定的时间间隔向SB添加动画
编辑:
我不再使用列表
这是我写的代码
class MessageWriter
{
Storyboard _sb = new Storyboard();
public MessageWriter()
{
}
public void ProcessMessage(string _Message, WrapPanel _Panel)
{
string[] _Words = _Message.Split(new char[1]{Convert.ToChar(" ")});
int _Counter = 1;
_sb = new Storyboard();
foreach (string _Word in _Words)
{
_Panel.Children.Add(ProcessWord(_Word));
if (_Counter < _Words.Length)
{
_Panel.Children.Add(ProcessWord(" "));
}
_Counter++;
}
_sb.Begin();
}
private StackPanel ProcessWord(string _Word)
{
Debug.Print(_Word);
StackPanel _Panel = new StackPanel();
_Panel.Orientation = Orientation.Horizontal;
_Panel.Margin = new System.Windows.Thickness(0, 0, 0, 0);
foreach (char _c in _Word.ToList())
{
Label _Label = new Label();
_Label.Opacity = 0;
_Label.Margin = new System.Windows.Thickness(0, 0, 0, 0);
_Label.Padding = new System.Windows.Thickness(0, 0, 0, 0);
_Label.Content = _c.ToString();
_Panel.Children.Add(_Label);
AnimateLabel(_Label);
}
return _Panel;
}
private void AnimateLabel(Label _Label)
{
DoubleAnimation _da = new DoubleAnimation();
_da.From = 0;
_da.To = 1;
int _MillSec = 500;
_da.Duration = new System.Windows.Duration(new TimeSpan(0, 0, 0, 0, _MillSec));
Storyboard.SetTargetProperty(_da, new PropertyPath(FrameworkElement.OpacityProperty));
Storyboard.SetTarget(_da, _Label);
_sb.Children.Add(_da);
}
}
class消息编写器
{
情节提要_sb=新情节提要();
公共消息作者()
{
}
public void ProcessMessage(字符串消息、包装面板)
{
string[]\u Words=\u Message.Split(新字符[1]{Convert.ToChar(“”)});
int _计数器=1;
_sb=新故事板();
foreach(字符串中的单词)
{
_Panel.Children.Add(ProcessWord(_-Word));
如果(_计数器<_单词长度)
{
_Panel.Children.Add(ProcessWord(“”);
}
_计数器++;
}
_某人开始做某事;
}
专用StackPanel进程字(字符串\u字)
{
调试.打印(_Word);
StackPanel _Panel=新StackPanel();
_面板方向=方向水平;
_Panel.Margin=新系统窗口厚度(0,0,0,0);
foreach(Word.ToList()中的字符)
{
标签_Label=新标签();
_不透明度=0;
_Label.Margin=new System.Windows.Thickness(0,0,0,0);
_Label.Padding=new System.Windows.Thickness(0,0,0,0);
_Label.Content=_c.ToString();
_Panel.Children.Add(_标签);
动画标签(_标签);
}
返回面板;
}
私有void AnimateLabel(标签_标签)
{
DoubleAnimation _da=新的DoubleAnimation();
_da.From=0;
_da.To=1;
int _MillSec=500;
_da.Duration=new System.Windows.Duration(新的时间跨度(0,0,0,0,_MillSec));
Storyboard.SetTargetProperty(_da,newPropertyPath(FrameworkElement.OpacityProperty));
故事板.SetTarget(_-da,_-Label);
_某人的子女加上(_da);
}
}
您只需设置每个动画的
而且绝对不需要故事板。只需将动画应用于标签:
DoubleAnimation opacityAnimation = new DoubleAnimation
{
To = 1d,
Duration = TimeSpan.FromSeconds(0.5),
BeginTime = TimeSpan.FromSeconds((double)labelIndex)
};
labelIndex++;
label.BeginAnimation(UIElement.OpacityProperty, opacityAnimation);
为什么每个变量名上都有奇怪的下划线?这一点已被广泛接受 在这个例子中是这样的。非常感谢。如果有人想就如何用故事板做到这一点发表意见,那将不胜感激。在未来,我需要在两者之间做一些工作,所以我需要先构建时间线,然后在完成后播放它。这也可以与添加到故事板的动画一起工作。更简单。下划线是我养成的一个坏习惯。我很笨,需要所有变量都有相同的前缀。我还没有问题,所以我从未改变。