Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Windows 8 XAML应用程序中拖动元素?_C#_Xaml_Windows 8 - Fatal编程技术网

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

C# 如何在Windows 8 XAML应用程序中拖动元素?,c#,xaml,windows-8,C#,Xaml,Windows 8,XAML/C#Windows 8应用程序 我在XAML/C中使用了MouseDragElementBehavior来在屏幕上拖动元素 不幸的是,在为Windows 8开发应用程序时,交互程序集不起作用 如何在Windows 8 XAML应用程序中拖动元素 谢谢 编辑:我在这里找到了一个示例: 只要复制代码,我就可以拖动我的元素。如果需要帮助,会更新某些问题。您需要处理要拖动的元素上的操作事件。另外,在元素上将操纵模式设置为非“无”的值 句柄操纵开始初始化拖动代码 处理操作Delta,检查e.De

XAML/C#Windows 8应用程序

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

不幸的是,在为Windows 8开发应用程序时,交互程序集不起作用

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

谢谢

编辑:我在这里找到了一个示例:


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

您需要处理要拖动的元素上的操作事件。另外,在元素上将操纵模式设置为非“无”的值

  • 句柄
    操纵开始
    初始化拖动代码
  • 处理
    操作Delta
    ,检查
    e.Delta
    值,并使用
    渲染变换偏移元素,或者如果在
    画布中,则使用画布坐标

  • 希望这能有所帮助。

    下面是一个基于科林答案的过于简化的例子

    考虑具有椭圆的画布:

    <Canvas Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <Ellipse Fill="Red" 
                 Canvas.Left="100"
                 Canvas.Top="100"
                 Width="100" 
                 Height="100" 
                 ManipulationMode="All" 
                 ManipulationDelta="Ellipse_ManipulationDelta_1"/>
    </Canvas>
    

    是否要从GridView/ListView或任何其他控件拖放项目?在第一种情况下,实现它的方法要简单得多。@RenaudDumont它不是listview,它只是一个项目,例如页面上的图标图像,用户可以将其拖动到页面上的任何位置。然后,我想要的是,当用户抬起手指/鼠标并释放元素时,它应该设置动画并返回到原始位置。使用这种更通用的解决方案:
    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);
        }