【问题标题】:How to animate GradientStop color?如何为 GradientStop 颜色设置动画?
【发布时间】:2017-06-04 16:54:22
【问题描述】:

我尝试了下面的代码,但是“Storyboard.SetTargetProperty(ca1, new PropertyPath("GradientStop.ColorProperty")); 行有问题

sb.Begin(this) 抛出 InvalidOperationException 并且无法解析“gradStop1.ColorProperty”。

如何正确地为 GradientStop 颜色设置动画?

private void UserControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        LinearGradientBrush lgb = new LinearGradientBrush(
           (Color)ColorConverter.ConvertFromString("#FF1E2838"),
           (Color)ColorConverter.ConvertFromString("#FF2B364F"),
           new Point(0.5, 0),
           new Point(0.5, 1));
        UCBody.Background = lgb;

        ColorAnimation ca1 = new ColorAnimation(
            (Color)ColorConverter.ConvertFromString("#FF1E2838"),
            (Color)ColorConverter.ConvertFromString("#FF1E1E1E"),
            TimeSpan.FromMilliseconds(600));

        ColorAnimation ca2 = new ColorAnimation(
            (Color)ColorConverter.ConvertFromString("#FF2B364F"),
            (Color)ColorConverter.ConvertFromString("#FF2B2B38"),
            TimeSpan.FromMilliseconds(600));

        Storyboard sb = new Storyboard();
        sb.Children.Add(ca1);
        sb.Children.Add(ca2);
        Storyboard.SetTargetName(ca1, "gradStop1");
        Storyboard.SetTargetProperty(ca1, new PropertyPath("GradientStop.ColorProperty"));
        Storyboard.SetTargetName(ca2, "gradStop2");
        Storyboard.SetTargetProperty(ca2, new PropertyPath("GradientStop.ColorProperty"));

        sb.Begin(this);
    }
}

【问题讨论】:

  • 为什么不在 XAML 中定义动画?它会更简单,您也不需要处理很多转换。对 XAML 定义的渐变画笔进行动画处理也会更容易。我应该指导你这样做吗?
  • 首先,使用new PropertyPath(GradientStop.ColorProperty)new PropertyPath(GradientStop.ColorProperty.Name) 代替字符串字面量。其次,gradStop1gradStop2 是什么?我没有看到具有这些名称的对象是在哪里定义的。
  • 请记得给有用的答案投票 :) stackoverflow.com/help/privileges/vote-up

标签: c# wpf visual-studio wpf-animation


【解决方案1】:

您没有名为“gradStop1”或“gradStop2”的对象,但您可以使用BeginAnimation 方法为LinearGradientBrush 的渐变停止点设置动画:

private void UserControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    LinearGradientBrush lgb = new LinearGradientBrush(
       (Color)ColorConverter.ConvertFromString("#FF1E2838"),
       (Color)ColorConverter.ConvertFromString("#FF2B364F"),
       new Point(0.5, 0),
       new Point(0.5, 1));
    UCBody.Background = lgb;

    ColorAnimation ca1 = new ColorAnimation(
        (Color)ColorConverter.ConvertFromString("#FF1E2838"),
        (Color)ColorConverter.ConvertFromString("#FF1E1E1E"),
        TimeSpan.FromMilliseconds(600));

    ColorAnimation ca2 = new ColorAnimation(
        (Color)ColorConverter.ConvertFromString("#FF2B364F"),
        (Color)ColorConverter.ConvertFromString("#FF2B2B38"),
        TimeSpan.FromMilliseconds(600));

    lgb.GradientStops[0].BeginAnimation(GradientStop.ColorProperty, ca1);
    lgb.GradientStops[1].BeginAnimation(GradientStop.ColorProperty, ca2);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-20
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-23
    • 2011-04-15
    • 2017-01-21
    相关资源
    最近更新 更多