0

我有一个关于 WPF 的问题。我全部用代码(C#)编写,没有 XAML。

小程序说明:我从一个手机传感器变成价值观。在 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()?

我将非常感谢任何示例和描述!谢谢!

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 回答