【问题标题】:How do I drag an element in Windows 8 XAML app?如何在 Windows 8 XAML 应用程序中拖动元素?
【发布时间】:2013-07-14 07:59:31
【问题描述】:

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 或任何其他控件中拖放项目吗?在第一种情况下,实现它的方法要容易得多。
  • @RenaudDumont 这不是列表视图,它只是一个项目,例如页面上的图标图像,用户可以在页面上的任何位置拖动。然后我想要的是当用户抬起手指/鼠标并释放元素时,它应该动画并返回到它的原始位置。

标签: c# xaml windows-8


【解决方案1】:

您需要处理要拖动的元素上的操作事件。此外,在元素上将 ManipulationMode 设置为 None 以外的值。

  1. 处理 ManipulationStarted 以初始化您的拖动代码
  2. 处理ManipulationDelta,检查e.Delta 值,并使用RenderTransform 偏移您的元素,或者如果在Canvas 中,则使用画布坐标。

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    这是一个基于 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);
        }
    

    【讨论】:

    猜你喜欢
    • 2013-08-18
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多