WPF: Wie kann man die Position von Elementen bestimmen, während die Reihenfolge in einem ListBox-Element geändert wird?

StackOverflow https://stackoverflow.com/questions/5352379

  •  27-10-2019
  •  | 
  •  

Frage

Ich folgte der Lösung für das Problem der Neuanordnung von Elementen bereitgestellt von dnr3. Funktioniert wie ein Zauber und ist sehr leicht zu verstehen. Jetzt möchte ich noch einen Schritt weiter gehen:

Angenommen, der ListBox enthält die Elemente A, B, C, D und E. Wenn in der genannten Lösung ein ListBoxItem in der Liste nach unten verschoben wird, befindet er sich unter dem Element, auf dem der Drop ausgeführt wurde. Wenn ich also Element B auswähle und es über dem Element D loslasse, nimmt es den Platz von D ein und D bewegt sich um einen Platz nach unten. Ich möchte in der Lage sein, einen Unterschied zu machen, wenn sich das gezogene Element näher an der oberen oder unteren Grenze des Zielobjekts befindet. Wenn es näher an der oberen Grenze liegt, möchte ich, dass es über dem Zielelement platziert wird, oder wenn Andernfalls. Ich brauche zwei Dinge, um dies zu erreichen:

  1. Ich benötige den vertikalen Mittelpunkt des Zielobjekts, um es mit der Mausposition vergleichen zu können. Das sollte einfach sein:

    targetItem.Height / 2;

  2. Ich benötige die Mausposition relativ zum Zielobjekt. Wie bekomme ich das?

    Am Ende möchte ich diese beiden Werte vergleichen. Wenn die Mausposition kleiner oder gleich dem vertikalen Mittelpunkt des Elements ist, wird das gezogene Objekt vor dem Zielobjekt abgelegt, andernfalls unten.

    Danke!

War es hilfreich?

Lösung

Verstanden!In der folgenden Zeile wird die Mausposition relativ zum Zielobjekt
abgerufen Point p = e.GetPosition(item);

So sollte der Drop-Event-Handler aussehen:

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)
    ...
}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top