2010-03-12 2 views
0

Я хочу создать интерфейс, подобный следующему в Silverlight. http://demos6.dundas.com/Silverlight/интерфейс динамической панели управления

Мне нужно создать приборную панель, где различные элементы можно переустановить с помощью Silverlight. Элементами панели управления могут быть разные пользовательские элементы управления, которые, в свою очередь, могут содержать диаграммы, графики, сетки ...... Пользователь должен иметь возможность динамически добавлять и удалять элементы панели. Пользователь также должен иметь возможность использовать перетаскивание для изменения элементов панели.

Если есть несколько примеров кода, чтобы начать меня, это будет здорово, поскольку мы только начинаем разработку Silverlight.

Спасибо, Pratik

ответ

1

Вы также можете попробовать Visifire. Вы можете использовать Charts and Gauges из Visifire и реализовать поведение Drag and drop. Следующий код поможет вам построить Перетаскивание по вашему желанию в вашем приложении. Вы можете присоединить это поведение к диаграмме или маркерам Visifire в приложении Silverlight или WPF.

Вы можете скачать исходный код (DragElementsInCanvasBehaviour.zip) с моего SkyDrive ниже.

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

[ "Привет мир" Перетащи класс поведения.]

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

    } 
} 

Надеется, что это помогает!

Смежные вопросы