我想在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;
}
答案 0 :(得分:1)
我怀疑这一行引起的问题:
dragTranslation.X += e.DeltaManipulation.Translation.X;
dragTranslation.Y += e.DeltaManipulation.Translation.Y;
每次都会X
增加Y
和dragTranslation
属性。尝试将X
和Y
的值重置为增量前的初始值。或者,如果初始值为零,您可以简单地指定新值(而不是使用新值添加当前值)。
dragTranslation.X = e.DeltaManipulation.Translation.X;
dragTranslation.Y = e.DeltaManipulation.Translation.Y;
答案 1 :(得分:1)
在代码中,所有sender
个对象(draggedButton
)都将RenderTransform
设置为同一个对象 - dragTranslation
。
当X
的{{1}}和Y
的值发生变化时,它会影响所有引用公共对象的对象 - dragTranslation
。
如果是这样,请尝试为每个对象设置一个实例。如果可行,您可以考虑优化。
或问题可能是因为 @ har07
建议的增加值答案 2 :(得分:0)
最后解决方案非常简单和合乎逻辑。 正如 @Sandeep G B 所述, snapping 发生了,因为所有按钮都使用相同的TranslateTransform对象。
我只需要在启动拖动时创建一个事件处理程序,然后在那里创建一个新的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;
}