如何动画渐变停止颜色?
问题描述:
我尝试下面的代码,但有一些错误线 “Storyboard.SetTargetProperty(CA1,新的PropertyPath(” GradientStop.ColorProperty“));如何动画渐变停止颜色?
sb.Begin(本)抛出一个InvalidOperationException并不能解决“gradStop1.ColorProperty”。
如何正确动画渐变停止颜色?
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);
}
}
答
您没有对象命名为‘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);
}
你为什么不定义在XAML动画?它会更简单,你不会需要处理大量的转换也是如此。对XAML定义的渐变画笔进行动画处理也会更容易。我应该引导你这样做吗? –
首先,使用'new PropertyPath(GradientStop.ColorProperty)'或'new PropertyPath(GradientStop.ColorProperty.Name)'来代替字符串。其次,什么是'gradStop1'和'gradStop2'?我看不到具有这些名称的对象在哪里定义。 – Maxim
请记得投了有用的答案:) https://stackoverflow.com/help/privileges/vote-up – mm8