2013-12-19 49 views
0

我是C#的新手,我正在嘗試做一個簡單的應用程序,其中有很多元素在屏幕上移動。經過一番研究,我發現了一個移動按鈕的代碼。問題是按鈕返回到它的原始狀態(雖然不可見)。當我點擊按鈕時,它會移出屏幕(就像我想的那樣),但是當我點擊它時(它應該做相反的動畫),但是它只是神奇地再次出現在屏幕上。WPF移動動畫並住在那裏

我也試圖讓它在動畫結束後改變位置,但那也不管用。這是我的代碼:

private void ButtonOnClick(object sender, RoutedEventArgs e) 
    { 
     if (nextSlideMoving) 
      return; 
     nextSlideMoving = true; 
     KinectTileButton target = (KinectTileButton)sender; 
     Vector offset = VisualTreeHelper.GetOffset(target); 
     if (nextSlideHidden) 
      moveAnimation(target, 0, offset.Y); 
     else 
      moveAnimation(target, -target.ActualWidth, offset.Y); 
    } 

    private void moveAnimation(KinectTileButton target, double newX, double newY) 
    { 
     Vector offset = VisualTreeHelper.GetOffset(target); 
     var top = offset.Y; 
     var left = offset.X; 

     TranslateTransform trans = new TranslateTransform(); 
     target.RenderTransform = trans; 

     DoubleAnimation anim1 = new DoubleAnimation(0, newY - top, TimeSpan.FromSeconds(0.5)); 
     trans.BeginAnimation(TranslateTransform.YProperty, anim1); 
     DoubleAnimation anim2 = new DoubleAnimation(0, newX - left, TimeSpan.FromSeconds(0.5)); 
     anim2.Completed += new EventHandler(finishedAnimation); 
     trans.BeginAnimation(TranslateTransform.XProperty, anim2); 
    } 

    public void finishedAnimation(Object sender, EventArgs e) 
    { 
     nextSlideMoving = false; 
     nextSlideHidden = !nextSlideHidden; 
     Console.WriteLine(nextSlideHidden); 
     if (nextSlideHidden) 
      nextSlide.Margin = new Thickness(-(SystemParameters.VirtualScreenWidth * 0.2), SystemParameters.VirtualScreenHeight * 0.2, SystemParameters.VirtualScreenWidth * 0.8, SystemParameters.VirtualScreenHeight * 0.2); // (LEFT, TOP, RIGHT, BOTTOM) 
     else 
      nextSlide.Margin = new Thickness(0, SystemParameters.VirtualScreenHeight * 0.2, SystemParameters.VirtualScreenWidth * 0.8, SystemParameters.VirtualScreenHeight * 0.2); // (LEFT, TOP, RIGHT, BOTTOM) 
    } 
+0

ricardo使用代碼編寫動畫非常困難..所以如果你使用混合來製作動畫(storyboard),那麼會更好.. – loop

+0

我會看看故事板的工作方式。謝謝。 –

回答

0

你似乎在問FillBehavior。在下面的鏈接看看:

http://msdn.microsoft.com/en-us/library/system.windows.media.animation.timeline.fillbehavior(v=vs.110).aspx

而且看一看自動翻轉屬性:

http://msdn.microsoft.com/en-us/library/system.windows.media.animation.timeline.autoreverse(v=vs.110).aspx

如果這些屬性不幫你任何futher我很樂意看看你的例子只是請在線上傳。

+0

我會看看他們,讓你知道。我習慣於Java,雖然它與C#非常相似,但我並不習慣這種XAML,並且不熟悉如何使用界面佈局。 –

+0

您在問題中標記了c#。然而,試試看,如果你仍然有問題,讓我知道:) –

+0

關於C#的問題,但我說的是我不習慣它,我只是在Java(我使用的語言很久以前) –