2010-03-12 2 views
0

Silverlight에서 다음과 비슷한 인터페이스를 만들고 싶습니다. http://demos6.dundas.com/Silverlight/동적 대시 보드 인터페이스

Silverlight를 사용하여 다른 요소를 다시 정렬 할 수있는 대시 보드를 만들어야합니다. 대시 보드 요소는 차례대로 차트, 계기, 그리드가 포함될 수있는 다양한 사용자 컨트롤이 될 수 있습니다 ...... 사용자는 대시 보드 요소를 동적으로 추가하고 제거 할 수 있어야합니다. 또한 사용자는 드래그 앤 드롭을 사용하여 대시 보드 요소의 위치를 ​​변경할 수 있어야합니다.

시작하기위한 몇 가지 코드 샘플이있는 경우 Silverlight 개발을 시작하는 중입니다.

감사합니다, Pratik

답변

1

Visifire도 시도 할 수 있습니다. Visifire의 차트 및 계기를 사용하고 드래그 앤 드롭 동작을 구현할 수 있습니다. 다음 코드는 을 작성하는 데 도움이됩니다. 응용 프로그램에서 끌어서 놓기 동작. Silverlight 또는 WPF 응용 프로그램에서 Visifire 차트 또는 계기판에이 동작을 첨부 할 수 있습니다.

내 SkyDrive에서 소스 코드 (DragElementsInCanvasBehaviour.zip)를 다운로드 할 수 있습니다.

https://skydrive.live.com/?cid=61995e3895be1728&sc=documents&uc=1&id=61995E3895BE1728!106#

[ "Hello World」의 드래그 앤 드롭 동작 클래스입니다.]

using System; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Ink; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 
using System.Windows.Interactivity; 

namespace DragInCanvasBehaviour 
{ 
    public class DragInCanvasBehaviour : Behavior<UIElement> 
    { 
     protected override void OnAttached() 
     { 
      base.OnAttached(); 
      this.AssociatedObject.MouseLeftButtonDown += AssociatedObject_MouseLeftButtonDown; 
      this.AssociatedObject.MouseMove += AssociatedObject_MouseMove; 
      this.AssociatedObject.MouseLeftButtonUp += AssociatedObject_MouseLeftButtonUp; 
     } 

     protected override void OnDetaching() 
     { 
      base.OnDetaching(); 
      this.AssociatedObject.MouseLeftButtonDown -= AssociatedObject_MouseLeftButtonDown; 
      this.AssociatedObject.MouseMove -= AssociatedObject_MouseMove; 
      this.AssociatedObject.MouseLeftButtonUp -= AssociatedObject_MouseLeftButtonUp; 
     } 

     private Canvas canvas; 
     private bool IsDragging = false; 
     private Point mouseOffset; 

     private void AssociatedObject_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
     { 
      if (canvas == null) 
       canvas = (Canvas)VisualTreeHelper.GetParent(this.AssociatedObject); 
      IsDragging = true; 
      mouseOffset = e.GetPosition(AssociatedObject); 
      AssociatedObject.CaptureMouse(); 
     } 

     private void AssociatedObject_MouseMove(object sender, MouseEventArgs e) 
     { 

      if (IsDragging) 
      { 
       FrameworkElement element = AssociatedObject as FrameworkElement; 
       FrameworkElement parent = element.Parent as FrameworkElement; 

       Point point = e.GetPosition(parent); 
       AssociatedObject.SetValue(Canvas.TopProperty, point.Y - element.Height /2); 
       AssociatedObject.SetValue(Canvas.LeftProperty, point.X - element.Width/2); 
      } 
     } 

     private void AssociatedObject_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
     { 
      if (IsDragging) 
      { 
       AssociatedObject.ReleaseMouseCapture(); 
       IsDragging = false; 
      } 
     } 

    } 
} 

희망이 도움!

관련 문제