如何在Windows 8 XAML应用程序中拖动元素?

4

XAML/C# Windows 8应用程序...

我在XAML/C#中使用MouseDragElementBehavior来拖动屏幕上的元素。

不幸的是,在为Windows 8开发应用程序时,交互程序集无法正常工作。

如何在Windows 8 XAML应用程序中拖动元素?

谢谢。

编辑: 我在这里找到了一个示例: http://code.msdn.microsoft.com/windowsapps/Input-3dff271b/sourcecode?fileId=44758&pathId=962809525

只需复制代码即可拖动我的元素。 如果需要帮助,我会更新一些问题。


您想从GridView/ListView或任何其他控件中拖放项目吗?在第一种情况下实现它的方式要容易得多。 - Renaud Dumont
@RenaudDumont 这不是一个列表视图,只是页面上的一个元素,例如用户可以在页面上拖动一个图标图片。然后我想要的是当用户松开手指/鼠标并释放该元素时,它应该动画化并返回到其原始位置。 - oms
2个回答

2
您需要处理要拖动的元素上的操作事件。同时,将ManipulationMode设置为元素上的值而非None。
  1. 使用ManipulationStarted来初始化您的拖动代码
  2. 使用ManipulationDelta,检查e.Delta的值,并使用RenderTransform偏移元素或者如果在Canvas中,则使用画布坐标。
希望这可以帮到您。

1
这是一个基于ColinE答案的过度简化示例。
考虑一个包含椭圆的画布:
<Canvas Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Ellipse Fill="Red" 
             Canvas.Left="100"
             Canvas.Top="100"
             Width="100" 
             Height="100" 
             ManipulationMode="All" 
             ManipulationDelta="Ellipse_ManipulationDelta_1"/>
</Canvas>

现在在代码后台,您处理ManipulationDelta:

private void Ellipse_ManipulationDelta_1(object sender, ManipulationDeltaRoutedEventArgs e)
    {
        Ellipse myEllipse = (Ellipse)sender;
        Canvas.SetLeft(myEllipse, Canvas.GetLeft(myEllipse) + e.Delta.Translation.X);
        Canvas.SetTop(myEllipse, Canvas.GetTop(myEllipse) + e.Delta.Translation.Y);
    }

使用这个更通用的解决方案:http://dotnetbyexample.blogspot.com/2012/04/porting-dragflickbehavior-from-windows.html - oms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接