WPF: come decidere la posizione degli elementi riorganizzando il loro ordine in un elemento ListBox?

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

  •  27-10-2019
  •  | 
  •  

Domanda

Ho seguito la soluzione al problema di riorganizzazione degli elementi fornito da dnr3. Funziona come un incantesimo ed è molto facile da capire. Ora, desidero fare un ulteriore passo avanti:

Diciamo che ListBox contiene gli elementi A, B, C, D ed E. Nella soluzione citata, se un ListBoxItem viene spostato in basso nell'elenco, viene posizionato sotto l'elemento su cui è stato eseguito il drop. Quindi, se seleziono l'elemento B e lo rilascio sopra l'elemento D, prenderà il posto di D e D si sposterà di una posizione verso il basso. Voglio essere in grado di fare la differenza se l'elemento trascinato è più vicino al limite superiore o inferiore elemento di destinazione - se è più vicino al limite superiore voglio che sia posizionato sopra l'elemento di destinazione, o sotto se altrimenti. Ho bisogno di due cose per farlo accadere:

  1. Ho bisogno del punto centrale verticale dell'elemento di destinazione per poterlo confrontare con la posizione del mouse. Dovrebbe essere facile:

    targetItem.Height / 2;

  2. Ho bisogno della posizione del mouse rispetto all'elemento di destinazione. Come posso ottenerlo?

Alla fine voglio confrontare questi due valori e se la posizione del mouse è minore o uguale al punto centrale verticale dell'elemento, l'elemento trascinato deve essere rilasciato prima dell'elemento target, altrimenti sotto.

Grazie!

È stato utile?

Soluzione

Capito!La riga seguente recupera la posizione del mouse rispetto all'elemento di destinazione
Point p = e.GetPosition(item);

Ecco come dovrebbe apparire il gestore di eventi di rilascio:

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)
    ...
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top