天天看點

相容Silverlight4的實用的Silverlight可拖放工具類源代碼

開發日常的Silverlight應用程式時,常常要對一個域多個控件實作可拖放的MOUSE操作,在Silverlight中實作拖放的功能其實非常簡單,但是為了提高程式功能代碼的可複用性,程式員常常喜歡把常用的代碼封裝成一個工具類,例如Asp.net中常用SQLHelper類,用來操作資料庫的,這裡我們介紹的類是在Silverlight中實作拖動的工具類,它支援Silverlight2.0至Silverlight4.0的各個版本通用,好了話不多說,我們還是看代碼吧:

public static class DragDrop

{

    private static bool IsDragging = false;

    private static Point curPoint;

    private const int MAX_ZINDEX = 99999;

    private const double CURRENT_OPACITY = 0.5;

    private static int lastZIndex;

    private static double lastOpacity;

    private static void sender_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

    {

        UIElement uiElement = sender as UIElement;

        if (uiElement != null)

        {

            uiElement.CaptureMouse();

            lastZIndex = (int)uiElement.GetValue(Canvas.ZIndexProperty);

            uiElement.SetValue(Canvas.ZIndexProperty, MAX_ZINDEX);

            lastOpacity = uiElement.Opacity;

            uiElement.Opacity = CURRENT_OPACITY;

            IsDragging = true;

            curPoint = new Point(e.GetPosition(null).X, e.GetPosition(null).Y);

        }

    }

    private static void sender_MouseMove(object sender, MouseEventArgs e)

        if (!IsDragging)

            return;

            double currentLeft = (double)uiElement.GetValue(Canvas.LeftProperty);

            double currentTop = (double)uiElement.GetValue(Canvas.TopProperty);

            double newLeft = (double)currentLeft + e.GetPosition(null).X - curPoint.X;

            double newTop = (double)currentTop + e.GetPosition(null).Y - curPoint.Y;

            uiElement.SetValue(Canvas.LeftProperty, newLeft);

            uiElement.SetValue(Canvas.TopProperty, newTop);

    private static void sender_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)

            uiElement.ReleaseMouseCapture();

            IsDragging = false;

            uiElement.SetValue(Canvas.ZIndexProperty, lastZIndex);

            uiElement.Opacity = lastOpacity;

    public static void Load(UIElement sender)

        sender.MouseLeftButtonDown += new MouseButtonEventHandler(sender_MouseLeftButtonDown);

        sender.MouseLeftButtonUp += new MouseButtonEventHandler(sender_MouseLeftButtonUp);

        sender.MouseMove += new MouseEventHandler(sender_MouseMove);

    public static void UnLoad(UIElement sender)

        sender.MouseLeftButtonDown -= new MouseButtonEventHandler(sender_MouseLeftButtonDown);

        sender.MouseLeftButtonUp -= new MouseButtonEventHandler(sender_MouseLeftButtonUp);

        sender.MouseMove -= new MouseEventHandler(sender_MouseMove);

}

DragDrop工具類的使用方法:DragDrop.Load(LayoutRoot);DragDrop是一個靜态類,使用起來非常簡單,以上隻要一行代碼就可以實作對Grid控件的拖放操作了。希望對大家有所幫助~!

繼續閱讀