【发布时间】: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)代替字符串字面量。其次,gradStop1和gradStop2是什么?我没有看到具有这些名称的对象是在哪里定义的。 -
请记得给有用的答案投票 :) stackoverflow.com/help/privileges/vote-up
标签: c# wpf visual-studio wpf-animation