Silverlight 如何拖放对象

 

下面的示例演示如何在基于 Silverlight 的应用程序中拖放对象。出于安全考虑,不能在应用程序之间拖放对象。因此,说成在 Silverlight 插件区域内"滑动"对象更为准确。但是,术语"拖放"更为人知,因此在此处使用。

XAML 
<UserControl x:Class="DragAndDropSimple.Page"

            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

            Width="400" Height="300">

            <Canvas x:Name="rootCanvas"

            Width="640"

            Height="480"

            Background="Gray"

            >

            <!-- You can drag this rectangle around the canvas. -->

            <Rectangle

            MouseLeftButtonDown="Handle_MouseDown"

            MouseMove="Handle_MouseMove"

            MouseLeftButtonUp="Handle_MouseUp"

            Canvas.Left="30" Canvas.Top="30" Fill="Red"

            Width="50" Height="50" />

            </Canvas>

            </UserControl>
C# 
// Global variables used to keep track of the

            // mouse position and whether the object is captured

            // by the mouse.

            bool isMouseCaptured;

            double mouseVerticalPosition;

            double mouseHorizontalPosition;

            public void Handle_MouseDown (object sender, MouseEventArgs args)

            {

            Rectangle item = sender as Rectangle;

            mouseVerticalPosition = args.GetPosition(null).Y;

            mouseHorizontalPosition = args.GetPosition(null).X;

            isMouseCaptured = true;

            item.CaptureMouse();

            }

            public void Handle_MouseMove(object sender, MouseEventArgs args)

            {

            Rectangle item = sender as Rectangle;

            if (isMouseCaptured)

            {

            // Calculate the current position of the object.

            double deltaV = args.GetPosition(null).Y - mouseVerticalPosition;

            double deltaH = args.GetPosition(null).X - mouseHorizontalPosition;

            double newTop = deltaV + (double)item.GetValue(Canvas.TopProperty);

            double newLeft = deltaH + (double)item.GetValue(Canvas.LeftProperty);

            // Set new position of object.

            item.SetValue(Canvas.TopProperty, newTop);

            item.SetValue(Canvas.LeftProperty, newLeft);

            // Update position global variables.

            mouseVerticalPosition = args.GetPosition(null).Y;

            mouseHorizontalPosition = args.GetPosition(null).X;

            }

            }

            public void Handle_MouseUp(object sender, MouseEventArgs args)

            {

            Rectangle item = sender as Rectangle;

            isMouseCaptured = false;

            item.ReleaseMouseCapture();

            mouseVerticalPosition = -1;

            mouseHorizontalPosition = -1;

            }
Visual Basic 
' Global variables used to keep track of the

            ' mouse position and whether the object is captured

            ' by the mouse.

            Dim isMouseCaptured As Boolean

            Dim mouseVerticalPosition As Double

            Dim mouseHorizontalPosition As Double

            Private Sub Handle_MouseDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs)

            Dim item As Rectangle = sender

            mouseVerticalPosition = e.GetPosition(Nothing).Y

            mouseHorizontalPosition = e.GetPosition(Nothing).X

            isMouseCaptured = True

            item.CaptureMouse()

            End Sub

            Private Sub Handle_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)

            Dim item As Rectangle = sender

            If (isMouseCaptured) Then

            ' Calculate the current position of the object.

            Dim deltaV As Double = e.GetPosition(Nothing).Y - mouseVerticalPosition

            Dim deltaH As Double = e.GetPosition(Nothing).X - mouseHorizontalPosition

            Dim newTop As Double = deltaV + item.GetValue(Canvas.TopProperty)

            Dim newLeft As Double = deltaH + item.GetValue(Canvas.LeftProperty)

            ' Set new position of object.

            item.SetValue(Canvas.TopProperty, newTop)

            item.SetValue(Canvas.LeftProperty, newLeft)

            ' Update position global variables.

            mouseVerticalPosition = e.GetPosition(Nothing).Y

            mouseHorizontalPosition = e.GetPosition(Nothing).X

            End If

            End Sub

            Private Sub Handle_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs)

            Dim item As Rectangle = sender

            isMouseCaptured = False

            item.ReleaseMouseCapture()

            mouseVerticalPosition = -1

            mouseHorizontalPosition = -1

            End Sub

            End Class

你可能感兴趣的:(silverlight)