Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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_Code Behind - Fatal编程技术网

C# 产生用户控制脉冲

C# 产生用户控制脉冲,c#,wpf,animation,code-behind,C#,Wpf,Animation,Code Behind,我想做的是让我的控制“脉冲”(比如放大一点,然后缩小一点,然后恢复到正常大小)。下面的代码正是我想要的,但似乎应该有一种更简单的方法。它必须在代码隐藏中完成,因为这是一个抽象类,我们的大多数控件都是从这个抽象类派生的。我对动画控件和故事板没有太多经验 因此,我的问题是,有没有比下面的方法更简单的方法来获得所需的结果(同时仍然在代码隐藏中完成) 这是一种很好的方法,WPF不提供自动脉冲的方法或事件。您的方法很简单,在创建它时,您知道如何根据自己的意愿修改它。您可以通过将增长/收缩逻辑移动到自己的方

我想做的是让我的控制“脉冲”(比如放大一点,然后缩小一点,然后恢复到正常大小)。下面的代码正是我想要的,但似乎应该有一种更简单的方法。它必须在代码隐藏中完成,因为这是一个抽象类,我们的大多数控件都是从这个抽象类派生的。我对动画控件和故事板没有太多经验

因此,我的问题是,有没有比下面的方法更简单的方法来获得所需的结果(同时仍然在代码隐藏中完成)


这是一种很好的方法,WPF不提供自动脉冲的方法或事件。您的方法很简单,在创建它时,您知道如何根据自己的意愿修改它。

您可以通过将增长/收缩逻辑移动到自己的方法中来简化一些事情。这减少了重复,并提供了潜在的更可重用的代码kibble

public void Pulse()
{
    var storyboard = new Storyboard
    {
        FillBehavior = FillBehavior.Stop,
        RepeatBehavior = new RepeatBehavior(2)
    };

    double timeIncrement = .15;

    double growPercent = 20;
    double shrinkPercent = -20;

    var firstTime = TimeSpan.FromSeconds(timeIncrement);
    var secondTime = TimeSpan.FromSeconds(timeIncrement * 3);
    var thirdTime = TimeSpan.FromSeconds(timeIncrement * 4);

    var scale = new ScaleTransform(1.0, 1.0);

    RenderTransformOrigin = new Point(.5, .5);
    RenderTransform = scale;

    storyboard = AddSizeChange(firstTime, growPercent, storyboard);
    storyboard = AddSizeChange(secondTime, shrinkPercent, storyboard);
    storyboard = AddSizeChange(thirdTime, growPercent, storyboard);

    BeginStoryboard(storyboard, HandoffBehavior.SnapshotAndReplace, false);
}

public Storyboard AddSizeChange(TimeSpan animTime, double changePercent, Storyboard storyboard)
{
    DoubleAnimation growX = new DoubleAnimation
    {
        Duration = animTime,
        To = 1 + changePercent
    };
    storyboard.Children.Add(growX);
    Storyboard.SetTargetProperty(growX, new PropertyPath("RenderTransform.ScaleX"));

    DoubleAnimation growY = new DoubleAnimation
    {
        Duration = animTime,
        To = 1 + changePercent
    };
    storyboard.Children.Add(growY);
    Storyboard.SetTargetProperty(growY, new PropertyPath("RenderTransform.ScaleY"));

    return storyboard;
}

我觉得很简单…好的,谢谢。我认为一定有动画的地方,我错过了,这将使这更简单。
public void Pulse()
{
    var storyboard = new Storyboard
    {
        FillBehavior = FillBehavior.Stop,
        RepeatBehavior = new RepeatBehavior(2)
    };

    double timeIncrement = .15;

    double growPercent = 20;
    double shrinkPercent = -20;

    var firstTime = TimeSpan.FromSeconds(timeIncrement);
    var secondTime = TimeSpan.FromSeconds(timeIncrement * 3);
    var thirdTime = TimeSpan.FromSeconds(timeIncrement * 4);

    var scale = new ScaleTransform(1.0, 1.0);

    RenderTransformOrigin = new Point(.5, .5);
    RenderTransform = scale;

    storyboard = AddSizeChange(firstTime, growPercent, storyboard);
    storyboard = AddSizeChange(secondTime, shrinkPercent, storyboard);
    storyboard = AddSizeChange(thirdTime, growPercent, storyboard);

    BeginStoryboard(storyboard, HandoffBehavior.SnapshotAndReplace, false);
}

public Storyboard AddSizeChange(TimeSpan animTime, double changePercent, Storyboard storyboard)
{
    DoubleAnimation growX = new DoubleAnimation
    {
        Duration = animTime,
        To = 1 + changePercent
    };
    storyboard.Children.Add(growX);
    Storyboard.SetTargetProperty(growX, new PropertyPath("RenderTransform.ScaleX"));

    DoubleAnimation growY = new DoubleAnimation
    {
        Duration = animTime,
        To = 1 + changePercent
    };
    storyboard.Children.Add(growY);
    Storyboard.SetTargetProperty(growY, new PropertyPath("RenderTransform.ScaleY"));

    return storyboard;
}