0

実行時にWPFシェイプを移動する方法がわかりません。具体的には、楕円を動かしたいです。

これが私の現在のコードです:

private void Tick(object sender, EventArgs e)
    {
        Point ballLocation = ball.TransformToAncestor(Application.Current.MainWindow).Transform(new Point(0, 0));
        //MessageBox.Show(ballLocation.ToString());
        Canvas.SetLeft(ball, ballLocation.X + 5);

        InvalidateVisual();
    }

タイマーが刻むたびに(1秒)、ボールはx方向に5ピクセル移動するはずですよね?これが間違っている場合、楕円の現在の場所を取得するにはどうすればよいですか。また、新しい場所に設定するにはどうすればよいですか。たぶん、InvalidateVisualに問題がありますか?基本的にコントロールを塗り替えると思います。それが間違っている場合は、楕円を塗り直して、位置の変化を表示するにはどうすればよいですか。私もball.InvalidateVisual()を試しましたが、機能しませんでした。

これが私がタイマーを作成して開始する方法です:

var timer = new DispatcherTimer {IsEnabled = true};
        timer.Tick += Tick;
        timer.Interval = new TimeSpan(0, 0, 1);
        timer.Start();
4

1 に答える 1

0

Canvas.LeftXAML のいずれかで、何らかの値で初期化されている場合

<Ellipse Name="ball" Canvas.Left="0" ... />

またはコードで

Canvas.SetLeft(ball, 0);

次の作品:

void Tick(object sender, EventArgs e)
{
    Canvas.SetLeft(ball, Canvas.GetLeft(ball) + 5);
}

デフォルト値が であるため、初期化が必要ですDouble.NaN


Canvas.Leftただし、スムーズな動きを得るために、プロパティをアニメーション化することを検討してください。ここから読み始めます:アニメーションの概要

于 2013-03-02T19:01:30.343 に答える