WPF storyboard and animation
-
Hi I am trying to create and start an animation in code instead of using xaml. When I use the Storyboard object(second example) nothing happens(There are no visible results of the animation), if I set animation's properties and start it without using the Storyboard object everything works normaly(first example). Below is the sample code which is put in the event handler for a button which is on the UserControl. //This works normaly btn_Click(object sender, RoutedEventArgs e) { LinearGradientBrush mask = new LinearGradientBrush(); GradientStop transparentStop = new GradientStop(Colors.Transparent, 0); GradientStop visibleStop = new GradientStop(Colors.Black, 0); mask.GradientStops.Add(transparentStop); mask.GradientStops.Add(visibleStop); this.OpacityMask = mask; DoubleAnimation visibleStopAnimation = new DoubleAnimation(0, 1.2, TimeSpan.FromSeconds(1.2), FillBehavior.HoldEnd); visibleStop.BeginAnimation(GradientStop.OffsetProperty, visibleStopAnimation); } //This doesn't work btn_Click(object sender, RoutedEventArgs e) { LinearGradientBrush mask = new LinearGradientBrush(); GradientStop transparentStop = new GradientStop(Colors.Transparent, 0); GradientStop visibleStop = new GradientStop(Colors.Black, 0); mask.GradientStops.Add(transparentStop); mask.GradientStops.Add(visibleStop); this.OpacityMask = mask; Storyboard story = new Storyboard(); story.Duration = TimeSpan.FromSeconds(1); DoubleAnimation visibleStopAnimation = new DoubleAnimation(0, 1, TimeSpan.FromSeconds(1), FillBehavior.HoldEnd); Storyboard.SetTarget(visibleStopAnimation, visibleStop); Storyboard.SetTargetProperty(visibleStopAnimation, new PropertyPath("(Offset)")); story.Children.Add(visibleStopAnimation); story.Begin(); } Does anybody has any idea? Any advice will be appreciated! Uros
-
Hi I am trying to create and start an animation in code instead of using xaml. When I use the Storyboard object(second example) nothing happens(There are no visible results of the animation), if I set animation's properties and start it without using the Storyboard object everything works normaly(first example). Below is the sample code which is put in the event handler for a button which is on the UserControl. //This works normaly btn_Click(object sender, RoutedEventArgs e) { LinearGradientBrush mask = new LinearGradientBrush(); GradientStop transparentStop = new GradientStop(Colors.Transparent, 0); GradientStop visibleStop = new GradientStop(Colors.Black, 0); mask.GradientStops.Add(transparentStop); mask.GradientStops.Add(visibleStop); this.OpacityMask = mask; DoubleAnimation visibleStopAnimation = new DoubleAnimation(0, 1.2, TimeSpan.FromSeconds(1.2), FillBehavior.HoldEnd); visibleStop.BeginAnimation(GradientStop.OffsetProperty, visibleStopAnimation); } //This doesn't work btn_Click(object sender, RoutedEventArgs e) { LinearGradientBrush mask = new LinearGradientBrush(); GradientStop transparentStop = new GradientStop(Colors.Transparent, 0); GradientStop visibleStop = new GradientStop(Colors.Black, 0); mask.GradientStops.Add(transparentStop); mask.GradientStops.Add(visibleStop); this.OpacityMask = mask; Storyboard story = new Storyboard(); story.Duration = TimeSpan.FromSeconds(1); DoubleAnimation visibleStopAnimation = new DoubleAnimation(0, 1, TimeSpan.FromSeconds(1), FillBehavior.HoldEnd); Storyboard.SetTarget(visibleStopAnimation, visibleStop); Storyboard.SetTargetProperty(visibleStopAnimation, new PropertyPath("(Offset)")); story.Children.Add(visibleStopAnimation); story.Begin(); } Does anybody has any idea? Any advice will be appreciated! Uros
When you work with Storyboards in code you need to use RegisterName. You can learn more about the "why" here: Storyboards Overview (MSDN)[^]
LinearGradientBrush mask = new LinearGradientBrush();
GradientStop transparentStop = new GradientStop(Colors.Transparent, 0);
GradientStop visibleStop = new GradientStop(Colors.Black, 0);
mask.GradientStops.Add(transparentStop);
mask.GradientStops.Add(visibleStop);this.OpacityMask = mask;
NameScope.SetNameScope(this, new NameScope());
this.RegisterName("visibleGradientStop", visibleStop);DoubleAnimation visibleStopAnimation = new DoubleAnimation(0, 1, TimeSpan.FromSeconds(1), FillBehavior.HoldEnd);
Storyboard story = new Storyboard();
story.Duration = TimeSpan.FromSeconds(1);
story.Children.Add(visibleStopAnimation);Storyboard.SetTargetName(visibleStopAnimation, "visibleGradientStop");
Storyboard.SetTargetProperty(visibleStopAnimation, new PropertyPath(GradientStop.OffsetProperty));story.Begin(this);
Blog: http://windowsclientdevelopment.spaces.live.com FAQs: http://windowspresentationfoundation.wikispaces.com http://windowsmobile.wikispaces.com http://vsto.wikispaces.com
-
When you work with Storyboards in code you need to use RegisterName. You can learn more about the "why" here: Storyboards Overview (MSDN)[^]
LinearGradientBrush mask = new LinearGradientBrush();
GradientStop transparentStop = new GradientStop(Colors.Transparent, 0);
GradientStop visibleStop = new GradientStop(Colors.Black, 0);
mask.GradientStops.Add(transparentStop);
mask.GradientStops.Add(visibleStop);this.OpacityMask = mask;
NameScope.SetNameScope(this, new NameScope());
this.RegisterName("visibleGradientStop", visibleStop);DoubleAnimation visibleStopAnimation = new DoubleAnimation(0, 1, TimeSpan.FromSeconds(1), FillBehavior.HoldEnd);
Storyboard story = new Storyboard();
story.Duration = TimeSpan.FromSeconds(1);
story.Children.Add(visibleStopAnimation);Storyboard.SetTargetName(visibleStopAnimation, "visibleGradientStop");
Storyboard.SetTargetProperty(visibleStopAnimation, new PropertyPath(GradientStop.OffsetProperty));story.Begin(this);
Blog: http://windowsclientdevelopment.spaces.live.com FAQs: http://windowspresentationfoundation.wikispaces.com http://windowsmobile.wikispaces.com http://vsto.wikispaces.com