2012-06-10 1 views
0

WPF에 대한 질문이 있습니다. XAML없이 코드 (C#)에 모두 씁니다.코드에서 WPF로 애니메이션 또는 캔버스를 업데이트하는 방법은 무엇입니까?

작은 프로그램 설명 : 휴대 전화 센서의 값이됩니다. wpf 프로그램에서이 값을 사용하여 캔버스의 타원에 다른 애니메이션을 만듭니다.

나는 서버 클래스에 http 서버를 가지고 있으며 값을 가져 와서 변수에 씁니다. 내 MainWindow를에서 (나는 그것을 호출), 내 DoubleAnimation 내 시간을 제공 :

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를() 나는 캔버스에 애니메이션 내 개체를 추가의 끝에 : 여기

내 두 애니메이션입니다

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

그것은 작동하지만 내 시간을 업데이트해야 서버가 새로운 지속 시간 값을 가져올 때

질문 : 새로운 기간 값이되면 DoubleAnimation이 변경되도록하려면 어떻게해야합니까?

다른 단어 질문 : 어떻게 loop 할 수 있습니다 server.GetData(); 기간 값을 업데이트 하시겠습니까?

다른 단어 2의 질문 : 캔버스가 자동으로 업데이트됩니까? 그렇다면 MainWindow()에서 자동 server.GetData()가 호출됩니다.

모든 예와 설명에 대해 매우 감사하게 생각합니다. 감사합니다.

+0

그냥 때마다 서버에서 값을 가져가, 새로운 애니메이션을 만들고 그 적용이 예전보다 우선합니다. 서버로부터 가치를 얻으려면,'DispatcherTimer'의'Tick' 이벤트에서 이것을 수행하십시오. 좋아, 이제 내가 왜 이걸하고 싶어하는지 묻고 싶다. 애니메이션과 같은 로딩을 만들고 싶습니까? – Code0987

+0

Neeraj, 감사합니다. 마을지도에 타원형이있어서 바에서의 활동을 나타냅니다. 사람들이 춤을 추면 타원이 빠르게 깜박입니다. 오키, 나는 디스패처 타이머의 틱 이벤트에서 메인 윈도우()에 내 getdata()를 부탁해야합니까? 내 질문을 부당하게 집어 넣었다면 말해줘! 내 작은 사례를 줄 수 있니? 감사! – user1440275

+0

샘플 코드를 입력했습니다. – Code0987

답변

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); 
}; 

...

관련 문제