0

WPFについて質問があります。XAMLを使用せずに、すべてCode(C#)で記述します。

小さなプログラムの説明:私は携帯電話のセンサーからの値になります。wpfプログラムでは、この値を使用して、キャンバス上の楕円でさまざまなアニメーションを作成します。

サーバークラスにhttpサーバーがあり、値を取得して変数に書き込みます。MainWindow()で呼び出すと、DoubleAnimationのDurationが表示されます。

 public MainWindow()
        {
            InitializeComponent();
            Canvas myPanel = new Canvas();
            ...
            Server server = new Server();
            server.GetData();
            float xxx ;
            xxx = server.duration;
            ...

GetData()-サーバーへのhttpリクエスト、可変期間への書き込みレスポンスを作成します。server.durationを介して取得するよりも;

それは完璧に動作します。

これが私のダブルアニメーションです:

 DoubleAnimation anim = new DoubleAnimation();
        anim.Duration = new Duration(TimeSpan.FromSeconds(xxx));
        anim.From = 10;
        anim.To = 0;
        anim.AutoReverse = true;
        anim.RepeatBehavior = RepeatBehavior.Forever;

MainWindow()の最後に、アニメーション付きのオブジェクトをCanvasに追加します。

myObject.BeginAnimation(Ellipse.OpacityProperty, anim);
        myPanel.Children.Add(myObject);
            this.Content = myPanel;

それは機能しますが、サーバーが新しい期間の値をもたらすときに、期間を更新する必要があります。

質問:新しい期間の値になったときにDoubleAnimationを変更するにはどうすればよいですか?

他の言葉での質問: server.GetData();をループするにはどうすればよいですか?期間の値を更新するには?

他の言葉での質問2: Canvasは自分自身を自動更新していますか?はいの場合、MainWindow()で自動server.GetData()を呼び出しますか?

I would be very grateful for any examples and descriptions! Thanks!

4

1 に答える 1

0

ここで私が思う私の解決策。

var timer = new DispatcherTimer(...);
...
// Time interval of large value should be optimal, like 1 minute, 10 minute, etc.
...
timer.Tick += (o, a) => 
{            
        server.GetData();
        float xxx ;
        xxx = server.duration;
        ...

     DoubleAnimation anim = new DoubleAnimation();
        anim.Duration = new Duration(TimeSpan.FromSeconds(xxx));
        anim.From = 10;
        anim.To = 0;
        anim.AutoReverse = true;
        anim.RepeatBehavior = RepeatBehavior.Forever;

    myObject.BeginAnimation(Ellipse.OpacityProperty, anim);
};

...

于 2012-06-11T21:25:21.853 に答える