官方描述:CompositionTarget 依每幀回調創建自訂動畫。實際上基於每次介面重繪觸發,與視窗重繪率同步,頻率固定難人工干預。
Rectangle rect;
double speed = 1;
Point moveTo;
public Window1() {
InitializeComponent();
rect = new Rectangle();
rect.Fill = new SolidColorBrush(Colors.Red);
rect.Width = 50;
rect.Height = 50;
rect.RadiusX = 5;
rect.RadiusY = 5;
Carrier.Children.Add(rect);
Canvas.SetLeft(rect, 0);
Canvas.SetTop(rect, 0);
CompositionTarget.Rendering += new EventHandler(Timer_Tick);
}
private void Carrier_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
moveTo = e.GetPosition(Carrier);
}
private void Timer_Tick(object sender, EventArgs e) {
double rect_X = Canvas.GetLeft(rect);
double rect_Y = Canvas.GetTop(rect);
Canvas.SetLeft(rect, rect_X + (rect_X < moveTo.X ? speed : -speed));
Canvas.SetTop(rect, rect_Y + (rect_Y < moveTo.Y ? speed : -speed));
}
註冊事件:CompositionTarget.Rendering += new EventHandler(Timer_Tick);
滑鼠點擊記錄目標點 moveTo,X、Y 速度同設為 speed。
Timer_Tick 為重繪回調,每幀更新位置趨近目標。