Silverlight 4対応の実用的なSilverlightドラッグ&ドロップ可能なツールクラスソースコード

6025 ワード

日常的なSilverlightアプリケーションを開発する際、1つのドメインの複数のコントロールに対してドラッグアンドドロップ可能なMOUSE操作を実現することがよくあり、Silverlightでドラッグアンドドロップを実現する機能は実は非常に簡単であるが、プログラム機能コードの多重性を高めるために、プログラマーはよくよく使われるコードをツールクラス、例えばAspにパッケージすることが好きである.Netでよく使われるSQLhelperクラスは、データベースを操作するために使用されます.ここで説明するクラスはSilverlightでドラッグを実現するツールクラスで、Silverlight 2をサポートしています.0からSilverlight 4.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;

        }



        UIElement uiElement = sender as UIElement;

        if (uiElement != null)

        {

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

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

        }

    }



    private static void sender_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)

    {

        UIElement uiElement = sender as UIElement;

        if (uiElement != null)

        {

            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        。
         ~!