0

dnr3が提供するアイテムの再配置問題の解決策に従いました。魔法のように機能し、非常に理解しやすいです。ここで、さらに一歩進んでみたいと思います。

ListBoxにアイテム A、B、C、D、および Eが含まれているとします。上記のソリューションでは、aListBoxItemがリストの下に移動すると、ドロップが実行されたアイテムの下に配置されます。したがって、項目 B を選択して要素 D の上で放すと、D の場所に移動し、D は 1 つ下に移動します。ドラッグされたアイテムがターゲット アイテムの上限または下限の境界に近い場合、違いを生むことができるようにしたいと考えています。それを実現するには、次の 2 つのことが必要です。

  1. マウスの位置と比較できるようにするには、ターゲット アイテムの垂直方向の中心点が必要です。それは簡単にできるはずです:

    targetItem.Height / 2;

  2. ターゲット項目に対するマウスの位置が必要です。どうすればそれを取得できますか?

最後に、これらの 2 つの値を比較したいと思います。マウスの位置がアイテムの垂直方向の中心点以下の場合、ドラッグされたアイテムはターゲット アイテムの前にドロップされ、それ以外の場合は下にドロップされます。

ありがとう!

4

1 に答える 1

0

とった!次の行は、ターゲット項目に対するマウスの位置を取得します
Point p = e.GetPosition(item);

ドロップ イベント ハンドラは次のようになります。

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 に答える