我有<条码>Canvas,有<条码>,<>Ellipse,标有<条码>。
<!-- 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>
我试图以方案方式给出
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();
有趣的是,如果我以姓名登记并用该名字在故事板上登记,效果就会再次出现:
// 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);