Winforms 在windows Phone中实现拖动和交换项目
我是windows phone新手。我的问题如下:Winforms 在windows Phone中实现拖动和交换项目,winforms,windows-phone-7,windows-7,drag-and-drop,Winforms,Windows Phone 7,Windows 7,Drag And Drop,我是windows phone新手。我的问题如下: 我有一个由按钮组成的网格。我想为按钮实现拖放和交换功能。如何在WP7平台上实现此功能。以下是解决方案xaml看起来像这样 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <toolkit:WrapPanel Height="510" HorizontalAlignment="Left" Margin="18,56,0,0"
我有一个由按钮组成的网格。我想为按钮实现拖放和交换功能。如何在WP7平台上实现此功能。以下是解决方案xaml看起来像这样
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<toolkit:WrapPanel Height="510" HorizontalAlignment="Left" Margin="18,56,0,0" Name="wrapPanel1" VerticalAlignment="Top" Width="411">
<Button Content="1" Height="124" Name="button2" Width="134">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener DragDelta="GestureListener_DragDelta" DragStarted="GestureListener_DragStarted" DragCompleted="GestureListener_DragCompleted" />
</toolkit:GestureService.GestureListener>
</Button>
<Button Content="2" Height="124" Name="button3" Width="134" >
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener DragDelta="GestureListener_DragDelta" DragStarted="GestureListener_DragStarted" DragCompleted="GestureListener_DragCompleted" />
</toolkit:GestureService.GestureListener>
</Button>
<Button Content="3" Height="124" Name="button4" Width="134">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener DragDelta="GestureListener_DragDelta" DragStarted="GestureListener_DragStarted" DragCompleted="GestureListener_DragCompleted" />
</toolkit:GestureService.GestureListener>
</Button>
<Button Content="4" Height="124" Name="button5" Width="134">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener DragDelta="GestureListener_DragDelta" DragStarted="GestureListener_DragStarted" DragCompleted="GestureListener_DragCompleted" />
</toolkit:GestureService.GestureListener>
</Button>
<Button Content="5" Height="124" Name="button6" Width="134">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener DragDelta="GestureListener_DragDelta" DragStarted="GestureListener_DragStarted" DragCompleted="GestureListener_DragCompleted" />
</toolkit:GestureService.GestureListener>
</Button>
<Button Content="6" Height="124" Name="button7" Width="134">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener DragDelta="GestureListener_DragDelta" DragStarted="GestureListener_DragStarted" DragCompleted="GestureListener_DragCompleted" />
</toolkit:GestureService.GestureListener>
</Button>
<Button Content="7" Height="124" Name="button8" Width="134">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener DragDelta="GestureListener_DragDelta" DragStarted="GestureListener_DragStarted" DragCompleted="GestureListener_DragCompleted" />
</toolkit:GestureService.GestureListener>
</Button>
<Button Content="8" Height="124" Name="button9" Width="134">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener DragDelta="GestureListener_DragDelta" DragStarted="GestureListener_DragStarted" DragCompleted="GestureListener_DragCompleted" />
</toolkit:GestureService.GestureListener>
</Button>
<Button Content="9" Height="124" Name="button10" Width="134">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener DragDelta="GestureListener_DragDelta" DragStarted="GestureListener_DragStarted" DragCompleted="GestureListener_DragCompleted" />
</toolkit:GestureService.GestureListener>
</Button>
<Button Content="10" Height="124" Name="button11" MouseLeftButtonDown="mouseDown" Width="134">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener DragDelta="GestureListener_DragDelta" DragStarted="GestureListener_DragStarted" DragCompleted="GestureListener_DragCompleted" />
</toolkit:GestureService.GestureListener>
</Button>
<Button Content="11" Height="124" Name="button12" Width="134">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener DragDelta="GestureListener_DragDelta" DragStarted="GestureListener_DragStarted" DragCompleted="GestureListener_DragCompleted" />
</toolkit:GestureService.GestureListener>
</Button>
<Button Content="12" Height="124" Name="button13" Width="134">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener DragDelta="GestureListener_DragDelta" DragStarted="GestureListener_DragStarted" DragCompleted="GestureListener_DragCompleted" />
</toolkit:GestureService.GestureListener>
</Button>
</toolkit:WrapPanel>
</Grid>
现在是C背后的代码#
翻译形式翻译形式
PointCollection points=new System.Windows.Media.PointCollection()
按钮对象
private void GestureListener_DragStarted(object sender, DragStartedGestureEventArgs e)
{
translateTransform = new TranslateTransform();
firstObject = sender as Button;
var transform1 = firstObject.TransformToVisual(wrapPanel1);
Point absolutePosition1 = transform1.Transform(new Point(0, 0));
}
private void GestureListener_DragDelta(object sender, DragDeltaGestureEventArgs e)
{
var moveablebutton = sender as Button;
moveablebutton.RenderTransform = translateTransform;
translateTransform.X += e.HorizontalChange;
translateTransform.Y += e.VerticalChange;
}
private void GestureListener_DragCompleted(object sender, DragCompletedGestureEventArgs e)
{
var lastObject = sender as Button;
Button b=new Button();
int count = wrapPanel1.Children.Count;
int index = wrapPanel1.Children.IndexOf(lastObject);
var transform2 = lastObject.TransformToVisual(wrapPanel1);
Point absolutePositon2 = transform2.Transform(new Point(0, 0));
Point P1;
Point P2 ;
Point P3 ;
Point P4 ;
P1 = e.GetPosition(wrapPanel1);
P2 = new Point(P1.X+134, P1.Y+124);
Button swapitem=null;
foreach (UIElement ctrl in wrapPanel1.Children)
{
int index2;
var transform3 = ctrl.TransformToVisual(wrapPanel1);
Point comparePos = transform3.Transform(new Point(0, 0));
swapitem = ctrl as Button;
index2 = wrapPanel1.Children.IndexOf(swapitem);
if (index != index2)
{
P3 = new Point(comparePos.X, comparePos.Y);
P4 = new Point(comparePos.X + 158, comparePos.Y+170);
if (!(P2.Y < P3.Y || P1.Y > P4.Y || P2.X < P3.X || P1.X > P4.X))
{
swapitem = ctrl as Button;
index2 = wrapPanel1.Children.IndexOf(swapitem);
b = lastObject as Button;
b.RenderTransform = translateTransform;
translateTransform.X -= e.HorizontalChange;
translateTransform.Y -= e.VerticalChange;
wrapPanel1.Children.Remove(lastObject);
wrapPanel1.Children.Remove(swapitem);
// wrapPanel1.Children.RemoveAt(index2);
if (index < index2)
{
wrapPanel1.Children.Insert(index, swapitem);
wrapPanel1.Children.Insert(index2, b);
}
else
{
wrapPanel1.Children.Insert(index2, b);
wrapPanel1.Children.Insert(index, swapitem);
}
break;
}}
}
}
private void GestureListener_DragStarted(对象发送方,DragStartedGestureEventArgs e)
{
translateTransform=新的translateTransform();
firstObject=发送者作为按钮;
var transform1=firstObject.TransformToVisual(wrapPanel1);
点绝对位置1=变换1.变换(新点(0,0));
}
私有void GestureListener_DragDelta(对象发送方,DragDeltaGestureEventArgs e)
{
var moveablebutton=发送方为按钮;
moveablebutton.RenderTransform=translateTransform;
translateTransform.X+=e.水平变化;
translateTransform.Y+=e.垂直变化;
}
私有void GestureListener_DragCompleted(对象发送方,DragCompletedGestureEventArgs e)
{
var lastObject=发送者作为按钮;
按钮b=新按钮();
int count=wrapPanel1.Children.count;
int index=wrapPanel1.Children.IndexOf(lastObject);
var transform2=lastObject.TransformToVisual(wrapPanel1);
点绝对位置2=变换2.变换(新点(0,0));
P1点;
P2点;
P3点;
P4点;
P1=e.GetPosition(wrapPanel1);
P2=新点(P1.X+134,P1.Y+124);
按钮swapitem=null;
foreach(wrapPanel1.Children中的UIElement ctrl)
{
int index2;
var transform3=ctrl.TransformToVisual(wrapPanel1);
点比较=变换3.变换(新点(0,0));
swapitem=ctrl as按钮;
index2=wrapPanel1.Children.IndexOf(swapitem);
如果(索引!=index2)
{
P3=新点(比较点X,比较点Y);
P4=新点(比较点X+158,比较点Y+170);
if(!(P2.YP4.Y | P2.XP4.X))
{
swapitem=ctrl as按钮;
index2=wrapPanel1.Children.IndexOf(swapitem);
b=最后一个对象作为按钮;
b、 RenderTransform=translateTransform;
translateTransform.X-=e.水平变化;
translateTransform.Y-=e.垂直变化;
wrapPanel1.Children.Remove(lastObject);
包装1.儿童。移除(swapitem);
//包装1。儿童。移除(index2);
如果(索引
@Shilpa,你能给这段代码添加一些注释吗?因为它需要它们。名称P1、P2、P3、p4无法说明这些点的确切用途。还有常量值(158170),它们从何处获取?添加的常量值是按钮的宽度和高度。P1、P2分别是按钮1的左上角和右下角。p3、p4也是要比较的第二个按钮。那么,重命名它们如何<代码>MovedButtonBottomRightPoint=新点(MovedButtonTopletPoint.X+lastObject.ActualWidth,MovedButtonTopletPoint.Y+lastObject.ActualHeight)代码>看起来比P2=新点(P1.X+134,P1.Y+124)更清晰