我试图在WP 7/8上获得多个可以独立拖动的按钮,但是我遇到了一些麻烦。
我的主要问题是我设置了这个布局...
在此处输入链接说明
,如果需要的话,我希望能够独立地将按钮拖出。现在,拖动的工作正常为一个按钮,但是一旦我释放它并尝试拖动另一个按钮,它只是在我按下的第一个按钮旁边"捕捉",直到所有按钮都在所有按钮上移动到同时。
基本上,当这种"捕捉"发生时,多个按钮开始一起移动,好像它们只是一个按钮。
这是我的XAML代码:
<Grid Name="buttons_container" Grid.Row="1" Margin="0,0,0,0">
<toolkit:WrapPanel HorizontalAlignment="Center" Margin="0,0,0,0" Name="wrapPanel1" VerticalAlignment="Center" Width="600">
<Button ManipulationDelta="Drag_ManipulationDelta" Content="1" Height="70" Name="button2" Width="150">
</Button>
<Button ManipulationDelta="Drag_ManipulationDelta" Content="2" Height="70" Name="button3" Width="150" ></Button>
<Button ManipulationDelta="Drag_ManipulationDelta" Content="3" Height="70" Name="button4" Width="150"></Button>
<Button ManipulationDelta="Drag_ManipulationDelta" Content="4" Height="70" Name="button5" Width="150"></Button>
<Button ManipulationDelta="Drag_ManipulationDelta" Content="5" Height="70" Name="button6" Width="150"></Button>
<Button ManipulationDelta="Drag_ManipulationDelta" Content="6" Height="70" Name="button7" Width="150"></Button>
<Button ManipulationDelta="Drag_ManipulationDelta" Content="7" Height="70" Name="button8" Width="150"></Button>
<Button ManipulationDelta="Drag_ManipulationDelta" Content="8" Height="70" Name="button9" Width="150"></Button>
<Button ManipulationDelta="Drag_ManipulationDelta" Content="9" Height="70" Name="button10" Width="150"></Button>
<Button ManipulationDelta="Drag_ManipulationDelta" Content="10" Height="70" Name="button11" Width="150"></Button>
<Button ManipulationDelta="Drag_ManipulationDelta" Content="11" Height="70" Name="button12" Width="150"></Button>
<Button ManipulationDelta="Drag_ManipulationDelta" Content="12" Height="70" Name="button13" Width="150"></Button>
</toolkit:WrapPanel>
</Grid>
这是我的C#代码:
private TranslateTransform dragTranslation; - global
dragTranslation = new TranslateTransform(); - in constructor of the class
void Drag_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
Button draggedButton = (Button)sender;
draggedButton.RenderTransform = dragTranslation;
dragTranslation.X += e.DeltaManipulation.Translation.X;
dragTranslation.Y += e.DeltaManipulation.Translation.Y;
}
我怀疑该行引起的问题:
dragTranslation.X += e.DeltaManipulation.Translation.X;
dragTranslation.Y += e.DeltaManipulation.Translation.Y;
每次dragTranslation
的X
和Y
属性。在增加之前,请尝试将X
和Y
的CC_5值重置为初始值。或者,如果初始值为零,则可以简单地分配新值(而不是添加新值的新值)。
dragTranslation.X = e.DeltaManipulation.Translation.X;
dragTranslation.Y = e.DeltaManipulation.Translation.Y;
在代码中所有sender
对象(draggedButton
)都将RenderTransform
设置为同一对象-dragTranslation
。
当更改X
和Y
的值时,它会影响所有对公共对象的引用的对象-dragTranslation
。
如果是这样,请尝试每个对象具有实例。您可以考虑优化是否有效。
或问题可能是由于@har07
最后,解决方案非常简单且逻辑。如 @sandeep g b 所述,发生了 snapping ,因为所有按钮都使用了相同的transerateTransform对象。
我只需要在启动拖动时创建事件处理程序,然后在那里创建一个新的TranslateTransform对象。
private void Drag_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
{
dragTranslation = new TranslateTransform();
draggedButton = (Button)sender;
}
private void Drag_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
draggedButton.RenderTransform = dragTranslation;
dragTranslation.X += e.DeltaManipulation.Translation.X;
dragTranslation.Y += e.DeltaManipulation.Translation.Y;
}