如何使用常用方法拖放控件?
我有以下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)我会将显式TranslateTransform
给smallStackPanel
然后我需要在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();
祝好运。