2012-06-25 2 views
0

스택 패널 안에 가로로 쌓아 올린 버튼 목록이 있습니다. 마우스를 MainWindow의 왼쪽 끝 근처에 놓으면 버튼이 천천히 오른쪽으로 움직 이도록 애니메이션을 적용하는 C#의 코드를 알고 싶습니다. 반면 내 마우스가 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)을 조정하십시오.

행운을 빈다.

관련 문제