интерфейс динамической панели - PullRequest
0 голосов
/ 13 марта 2010

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

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

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

Спасибо, Pratik

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

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

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

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

    }
}

Надеюсь, это поможет!

0 голосов
/ 13 марта 2010

Посмотрите на «Панель перетаскивания» в библиотеке элементов управления Blacklight . Это отлично подходит для создания инструментальных панелей. Здесь даже есть руководство по использованию над здесь ...

...