[WPF] Drag and Drop

Mi sono trovato a dover implementare il Drag and Drop tra l'item di una ListView e uno degli item di una ListBox, ma la documentazione in merito è parecchio scarsa...

Si trovano più che altro esempi di come "draggare" un file dentro la propria applicazione o come spostare una figura da un lato all'altro di un Canvas...

DragDrop.DoDragDrop di per sè permette di passare i dati dell'oggetto del trasferimento.

La facilità dell'implementazione sta nel fatto che è sufficiente impostare a true la proprietà AllowDrop del controllo target (la mia ListBox)

 AllowDrop="True"

dichiarare l'Event Handler MouseMove sul controllo source (la mia ListView) nel codice XAML

MouseMove="MyListView_MouseMove"

e gestirla lato code behind

C# Code Behind

L'uso del MouseButtonState.Pressed mi evita di dover intercettare l'evento PreviewMouseButtonDown e l'equivalente Up per impostare n variabili booleane (tipo m_IsDown, m_IsDragging, ecc.). Ovviamente questa soluzione non è esaustiva: un eventuale scorrimento delle scrollbar della ListView, in caso di elemento selzionato, verrebbe interpretato come Drag e non otterrebbe l'effetto di scorrimento desiderato; la cosa si potrebbe ovviare "innestando" la MyListView in un controllo Scroller disabilitando lo scrolling automatico della ListView stessa...

Nell'EventHandler del Drop dovrei identificare l'item sul quale sto "droppando" (questo lo vediamo un'altra volta ) potrei ottenere dal DragEventArgs tramite Data.GetData l'oggetto che ho passato tramite DoDragDrop (il secondo parametro) e che mi verrebbe restituito come IDataObject; nel mio caso sono stato più fortunato: ListView.SelectedItem restituisce direttamente l'oggetto "bindato" al ListViewItem.

Parecchie delle cose che ho elencato (e che magari ho dato per scontato nel codice presentato) derivano dal fatto che source e target del Drag and Drop risiedono nella stessa Window e quindi la Window conosce entrambi. In caso contrario l'IDataObject conterrebbe i dati draggati

 

Print | posted @ Thursday, December 20, 2007 12:41 AM

Comments on this entry:

Gravatar # re: [WPF] Drag and Drop
by zbylove at 4/6/2011 4:00 AM

but an accent that reflects a woman’s cachet in amusing circles.Gold watches are a accurate risk. Once accessible attending carefully at how the the 18k gold watches the movement is located. Recent watches accept a artificial anatomy to absorb the movement. The top manufacturers do not use these. Aggregate is
Comments have been closed on this topic.