0

我按照dnr3提供的项目重新排列问题的解决方案。像魅力一样工作,很容易理解。现在,我想更进一步:

假设ListBox包含项目 A、B、C、D 和 E。在上述解决方案中,如果 aListBoxItem在列表中向下移动,则它位于执行 drop 的项目下方。因此,如果我选择项目 B 并将其释放到元素 D 上,它将占据 D 的位置,而 D 将向下移动一个位置。如果拖动的项目更靠近目标项目的上边界或下边界,我希望能够有所作为——如果它更靠近上边界,我希望它放置在目标项目的上方,否则放置在目标项目的下方。我需要两件事来实现这一点:

  1. 我需要目标项目的垂直中心点才能将其与鼠标位置进行比较。这应该很容易做到:

    targetItem.Height / 2;

  2. 我需要相对于目标项目的鼠标位置。我怎么得到它?

最后我想比较这两个值,如果鼠标位置小于或等于项目的垂直中心点,则拖动的项目将被放置在目标项目之前,否则在下方。

谢谢!

4

1 回答 1

0

知道了!以下行检索相对于目标项的鼠标位置
Point p = e.GetPosition(item);

下面是 drop 事件处理程序的外观:

private void PlaylistListBoxItem_Drop(object sender, DragEventArgs e)
{
    ...
    ListBoxItem item;
    int centerY;
    Point p;

    item = sender as ListBoxItem;
    centerY = item.Height / 2;
    p = e.GetPosition(item);

    if (p.Y <= centerY)
    ...
}
于 2011-03-18T13:44:17.440 回答