2

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

由于我的 ItemTemplate 包含一个边框,因此它不支持像 GridView 或 ListView 这样的拖放。之前我尝试对我的方块同时使用 GridView 和 ListView ,但是 GUI 变得太迟钝,所以我切换到一个简单的边框,这使它更快。

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

我知道,因为我自己在做拖放功能,所以我需要做一些事情来挂钩边框的放置事件,但是什么?

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

我已经为此苦苦挣扎了几个小时,非常感谢一些帮助。

4

2 回答 2

0

创建一个附加属性并将其与Border外的父控件挂钩,将本机拖放到ItemTemplate的TargetType。

将它连接到 PreviewMouseUp 和 PreviewMouseDown 事件。

更多内容可在此处找到WPF 教程拖放

于 2012-08-01T13:23:16.820 回答
0

您只需要Thumb在要拖放的任何内容之上包含一个对象。该Thumb对象将触发所需的事件,您可以从这些事件中处理您想要的任何行为(例如,您可能希望在画布上移动底层对象以模拟拖动底层对象)。

您可以查看Thumb 的 MSDN 页面以帮助您入门。

然后,当Thumb您收到通知时,您会以任何适合您的方式持有您的底层证券,然后您调用Canvas.SetLeft/Top (object, my new coordinates). 通常,您的新坐标将类似于Canvas.GetLeft/Top(object) + args.Horizontal/VerticalChange.

正如您所知道的,您必须使用 aCanvas并自己放置对象,而不是使用 aGrid或 a ListView

于 2013-03-24T19:33:22.447 回答