2012-06-25 54 views
0

我有一個按鈕列表包裝在一個堆疊面板,它們水平堆疊。我想知道C#背後的代碼來應用動畫,如果我的鼠標靠近MainWindow的左端,按鈕會慢慢向右移動。而如果我的鼠標靠近MainWindow的右側,按鈕緩慢向左移動。水平移動控件

按鈕在運行時添加和設置樣式。

+0

你到目前爲止嘗試過什麼?我會在窗口上使用鼠標事件來捕捉位置。然後,如果鼠標在你想要的位置,你可以滾動。 – webber2k6

+0

是的,我可以做到這一切。只需要知道如何使用Storyboard將控件水平移動到正確的不停止 – RStyle

+0

的片段是否可以移動堆疊面板本身?什麼是包含的堆棧面板? –

回答

0

如果有可能爲你使用canvas代替stackpanel您可以使用此代碼來實現我爲你寫馬上動畫:

中聲明你的類像下面的字段:private bool _running = true;

在此之後,你可以使用它來動畫你的按鈕。

new Thread(() => 
      { 
       while (_running) 
       { 
        Thread.Sleep(20); 

        canvas.Dispatcher.BeginInvoke(DispatcherPriority.Input, new Action(() => 
        { 
         var position = Mouse.GetPosition(canvas).X; 
         var canvasWidth = canvas.ActualWidth; 

         if (position >=0 && position < 10.0d) 
          btn.SetValue(Canvas.LeftProperty, (double)btn.GetValue(Canvas.LeftProperty) + 1); 

         if (position <= canvasWidth && position > canvasWidth - 10.0d) 
          btn.SetValue(Canvas.LeftProperty, (double)btn.GetValue(Canvas.LeftProperty) - 1); 
        })); 
       } 
      }).Start(); 

不要忘記以下用法添加到您的類:

using System.Threading; 
using System.Windows.Threading; 

如果你想要的代碼與不止一個按鈕,工作只使用一個列表,例如和重寫代碼一點點。還可以根據需要調整Thread.Sleep(20)

祝你好運。