これは、形状のY2
プロパティをアニメーション化する簡単なプログラムです。メソッドを使用して をターゲットにしてLine
いることに注意してください。このプログラムは正常に動作します。SetTarget
Line
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace SoGeneratingAnimatedLine
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var canvas = new Canvas();
Content = canvas;
var sb = new Storyboard();
var line = new Line()
{
X1 = 10, Y1 = 10,
X2 = 90, Y2 = 10,
Stroke = Brushes.Black,
StrokeThickness = 2
};
canvas.Children.Add(line);
var animation = new DoubleAnimation(10, 90, new Duration(TimeSpan.FromMilliseconds(1000)));
sb.Children.Add(animation);
Storyboard.SetTarget(animation, line);
Storyboard.SetTargetProperty(animation, new PropertyPath(Line.Y2Property));
MouseDown += (s, e) => sb.Begin(this);
}
}
}
a の であるEndPoint
a のをアニメーション化する同様のプログラムを次に示します。LineGeometry
Data
Path
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace SoGeneratingAnimatedLine
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var canvas = new Canvas();
Content = canvas;
var sb = new Storyboard();
var lineGeometry =
new LineGeometry(new Point(10, 10), new Point(90, 10));
var path = new Path()
{
Stroke = Brushes.Black,
StrokeThickness = 2,
Data = lineGeometry
};
canvas.Children.Add(path);
var animation =
new PointAnimation(
new Point(90, 10),
new Point(90, 90),
new Duration(TimeSpan.FromMilliseconds(1000)));
sb.Children.Add(animation);
Storyboard.SetTarget(animation, lineGeometry);
Storyboard.SetTargetProperty(animation, new PropertyPath(LineGeometry.EndPointProperty));
MouseDown += (s, e) => sb.Begin(this);
}
}
}
この 2 番目のバージョンは機能しません。ただし、次の行を置き換えると:
Storyboard.SetTarget(animation, lineGeometry);
と:
RegisterName("geometry", lineGeometry);
Storyboard.SetTargetName(animation, "geometry");
その後、アニメーションが実行されます。
SetTarget
2 番目のプログラムのバージョンが機能しないのはなぜですか? /コンボSetTarget
の代わりに使用できるのはいつですか? 2つのアプローチの違いは何ですか?RegisterName
SetTargetName