Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以特定的时间间隔添加动画_C#_Wpf_Animation - Fatal编程技术网

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);

为什么每个变量名上都有奇怪的下划线?这一点已被广泛接受

在这个例子中是这样的。非常感谢。如果有人想就如何用故事板做到这一点发表意见,那将不胜感激。在未来,我需要在两者之间做一些工作,所以我需要先构建时间线,然后在完成后播放它。这也可以与添加到故事板的动画一起工作。更简单。下划线是我养成的一个坏习惯。我很笨,需要所有变量都有相同的前缀。我还没有问题,所以我从未改变。