拖拽使用Metro中的ItemsControl删除(C#/ XAML)

时间:2012-04-16 17:08:39

标签: c# xaml drag-and-drop microsoft-metro

我有一个应用程序,我有一个usercontrol,包含带有正方形的ItemsControl(由边框和底层控件表示)。 把它想象成一个棋盘。

由于我的ItemTemplate包含一个边框,因此它没有本地支持drag& amp;像GridView或ListView一样丢弃。我尝试使用GridView和ListView作为我的方块之前但是GUI变得太迟钝所以我切换到一个简单的边框,这使得它更快。

通过连接操纵事件,我仍然设法为我的边框及其内容(至少在GUI上)获得拖动行为。 然而,当我尝试将方形(边框)拖到另一个方格时,我似乎无法触发掉落事件。我需要知道目标方块是哪个。

我明白,因为我自己正在执行拖放功能,所以我需要做一些事情来挂钩边框的drop事件,但是什么?

我还尝试订阅边界事件PointerEntered,PointerMoved等,以找出指针所在的方格,当按钮被释放时,我会知道目标方块是哪个。这似乎只能在两个方向上工作(向右和向下),指针事件似乎在向左或向上移动时不会发射,很奇怪。我读过somwhere,项目(正方形)有不同的ZIndex,这可能会影响事件的发射。

我现在已经挣扎了几个小时,非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

创建一个附加属性并将其连接到Border外部的父控件,将本机拖放放置到ItemTemplate的TargetType。

将其连接到PreviewMouseUp和PreviewMouseDown事件。

更多相关内容可见WPF Tutorial Drag and Drop

答案 1 :(得分:0)

你只需要在你要拖动的任何东西上加一个Thumb对象。下降。 Thumb对象将触发所需的事件,您可以处理这些事件所需的任何行为(您可能希望移动画布上的基础对象以模拟拖动基础对象)。

您可以查看the MSDN page of Thumb以开始使用。

然后,当您收到Thumb通知时,您会以任何适合自己的方式获得您的潜在客户,并致电Canvas.SetLeft/Top (object, my new coordinates)。通常,您的新坐标类似于Canvas.GetLeft/Top(object) + args.Horizontal/VerticalChange

如您所知,您必须使用Canvas并自行放置对象,而不是使用GridListView