还没用过urhosharp,不过这里有一些关于使用拖放的建议,不知道对你有没有帮助。
urhosharp: Basic Actions
从urhosharp的文档中,有一些基本的动作解释,但里面没有拖放。也许你可以结合每个平台上的动作和拖动方法来做到这一点。但这需要你去尝试。
UWP: reference link here
以下概述了在应用中启用拖放所需的操作:
- 通过将元素的 CanDrag 属性设置为
是的。
- 构建数据包。系统处理图像和文本
自动,但对于其他内容,您需要处理
DragStarted 和 DragCompleted 事件并使用它们来构建您的
自己的数据包。
- 通过将 AllowDrop 属性设置为 true 来启用丢弃
可以接收丢弃内容的元素。
- 处理DragOver事件让系统知道什么类型的拖拽
元素可以接收的操作。
- 处理 Drop 事件以接收拖放的内容。
代码示例:
<Grid AllowDrop="True" DragOver="Grid_DragOver" Drop="Grid_Drop"
Background="LightBlue" Margin="10,10,10,353">
<TextBlock>Drop anywhere in the blue area</TextBlock>
</Grid>
private void Grid_DragOver(object sender, DragEventArgs e)
{
e.AcceptedOperation = DataPackageOperation.Copy;
}
IOS:reference link here
通过 iOS 中的拖放,用户可以使用连续手势将项目从屏幕上的一个位置拖到另一个位置。拖放活动可以在单个应用程序中进行,也可以在一个应用程序中开始并在另一个应用程序中结束。
- 使用拖动项在源应用程序和目标应用程序之间传达数据表示承诺。
- 采用拖动交互 API 提供拖动项目。
- 采用拖放交互 API 来选择性地使用拖动的内容。
- 演示如何为 UIImageView 实例启用拖放功能。
示例代码:
func customEnableDragging(on view: UIView, dragInteractionDelegate: UIDragInteractionDelegate) {
let dragInteraction = UIDragInteraction(delegate: dragInteractionDelegate)
view.addInteraction(dragInteraction)
}
func dragInteraction(_ interaction: UIDragInteraction, itemsForBeginning session: UIDragSession) -> [UIDragItem] {
// Cast to NSString is required for NSItemProviderWriting support.
let stringItemProvider = NSItemProvider(object: "Hello World" as NSString)
return [
UIDragItem(itemProvider: stringItemProvider)
]
}
这是 Xamarin IOS 的 sample。
或者你可以在IOS中使用UIPanGestureRecognizer来移动视图。这里是Walkthrough: Using Touch in Xamarin.iOS.你需要做的就是让view.center跟随panGesture来改变。
安卓: reference link here
借助 Android 拖放框架,您可以允许用户使用图形拖放手势将数据从一个视图移动到另一个视图。该框架包括一个拖动事件类、拖动侦听器以及辅助方法和类。
拖放过程基本上有四个步骤或状态:
- 已启动:响应用户开始拖动的手势,您的应用程序调用 startDrag() 来告诉系统开始拖动。
- Continuing:用户继续拖动。
- Dropped:用户在可以接受数据的 View 的边界框内释放拖拽阴影。
- 结束:用户释放拖动阴影后,系统发出(如有必要)动作类型ACTION_DROP的拖动事件后,系统发出动作类型的拖动事件>ACTION_DRAG_ENDED 表示拖动操作结束。
表。 DragEvent 动作类型:
或者在Android中可以使用onTouchEvent来移动视图,需要计算视图的位置。Walkthrough - Using Touch in Android
主要是处理按下和移动两条消息,重载onTouchEvent。数学知识(平移):记录ACTION_DOWN时的坐标点,根据当前位置和ACTION_MOVE按下时的位置计算平移量。刷新控件,导致控件重绘,重绘时移动绘图的左上角坐标。
这里也有关于Drag & Drop in Xamarin forms的讨论。可能会有帮助。