如何使用常用方法拖放控件?

我有以下XAML代码,它在一个大的父Stack Panel中创建了两个堆栈面板。 我希望能够在父bigStack面板中拖动每个小堆栈面板。

XAML

          

C#后端:

 private TranslateTransform dragtranslation ; private void objectManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) { dragtranslation.X += e.Delta.Translation.X; dragtranslation.Y += e.Delta.Translation.Y; } private void objectManipulationStarting(object sender, ManipulationStartingRoutedEventArgs e) { var stackDragged = e.OriginalSource as StackPanel; dragtranslation = new TranslateTransform(); stackDragged.RenderTransform = this.dragtranslation ; } 

原始代码在这里 (官方微软UWP文档),但适应(显然错误),以满足我的需求

问题1

1)第一次拖动smallStack1:好的

2)第二次拖动smallStack2:恢复到原始位置

问题2

1)第一次拖动smallStack1:好的

2)第一次拖动smallStack2:好的

3)再次拖动其中一个smallStack:恢复到原始位置

您可以在下面的.gif文件中查看问题:

在此处输入图像描述

我希望得到什么

使用常用方法拖动控件,因为我计划在bigStack面板中动态创建更多控件。

每次单击项目时,您基本上都要重新实现TranslateTransform 。 这就是为什么当你第二次点击该项时,它会导航回0,0这是TranslateTransform的原始位置。

要以一种更简单的方式处理这个问题,这就是我要做的。

1)我会将显式TranslateTransformsmallStackPanel

                   

然后我需要在codebehind中做的就是处理ManipulationDelta

 private void objectManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) { var stackDragged = e.OriginalSource as StackPanel; (stackDragged.RenderTransform as TranslateTransform).X += e.Delta.Translation.X; (stackDragged.RenderTransform as TranslateTransform).Y += e.Delta.Translation.Y; } 

输出:

在此处输入图像描述

更新

从代码中添加TranslateTransform

 StackPanel sp = new StackPanel(); sp.RenderTransform = new TranslateTransform(); 

祝好运。