I have a Canvas with an Ellipse object named Marker:
<!-- Boilerplate --> <Window x:Class="WpfApplication6.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:WpfApplication6="clr-namespace:WpfApplication6" Title="MainWindow" Height="350" Width="525" SnapsToDevicePixels="True"> <Grid> <Canvas x:Name="DrawingCanvas"> <!-- ##### Item of interest, below ##### --> <Ellipse x:Name="Marker" Canvas.Left="200" Canvas.Top="100" Width="25" Height="25" Stroke="Black" Fill="#E0E000"> <Ellipse.Effect> <BlurEffect x:Name="MarkerBlurEffect" Radius="0.0" /> </Ellipse.Effect> </Ellipse> </Canvas> </Grid> </Window> I am trying to programatically give the Marker ellipse a blur animation:
DoubleAnimation blurEffectAnimation=new DoubleAnimation { From=0, To=10, Duration=TimeSpan.FromSeconds(2.0) }; // If I uncomment the line below, the blur effect animation works perfectly //Marker.Effect.BeginAnimation(BlurEffect.RadiusProperty, blurEffectAnimation); // If I do it using the storyboard code below, the animation has no effect Storyboard.SetTarget(blurEffectAnimation, Marker.Effect); Storyboard.SetTargetProperty(blurEffectAnimation, new PropertyPath(BlurEffect.RadiusProperty)); Storyboard sb=new Storyboard(); sb.Children.Add(blurEffectAnimation); sb.Begin(); Interestingly, if I register the effect by name and use that name with the storyboard, the effect starts working again:
// Register the MarketBlurEffect (as it's named in the XAML) effect by name // with the FrameworkElement being animated (why do I need to?) Marker.RegisterName("MarkerBlurEffect",MarkerBlurEffect); // Instead of SetTarget, use SetTargetName on the registered name Storyboard.SetTargetName(blurEffectAnimation, "MarkerBlurEffect"); Storyboard.SetTargetProperty(blurEffectAnimation, new PropertyPath(BlurEffect.RadiusProperty)); Storyboard sb=new Storyboard(); sb.Children.Add(blurEffectAnimation); // Provide Marker to the Begin function in order to specify the name scope // for the registered ("MarkerBlurEffect") name. Not doing this will result // in an InvalidOperationException with the Message property set to: // No applicable name scope exists to resolve the name 'MarkerBlurEffect'. sb.Begin(Marker);