Drag and drop

di il
22 risposte

22 Risposte - Pagina 2

  • Re: Drag and drop

    Ecco qua,
    Questa è la parte che riguarda il drag:
    
    private void listBox1_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        if (GetItem(listBox1, e.GetPosition(listBox1)) != null)
            startDrag = true;
    }
    
    private void listBox1_MouseMove(object sender, MouseEventArgs e)
    {
        if ( startDrag && (e.LeftButton == MouseButtonState.Pressed))
        {
            if (listBox1.SelectionMode == SelectionMode.Multiple)
            {
                DataObject dragData = new DataObject("myObjectList", listBox1.SelectedItems);
                DragDrop.DoDragDrop(listBox1, dragData, DragDropEffects.Move);
            }
            else
            {
                DataObject dragData = new DataObject("myObject", listBox1.SelectedItem);
                DragDrop.DoDragDrop(listBox1, dragData, DragDropEffects.Move);
            }
        }
    
        startDrag = false;
    }
    
    private static object GetItem(ItemsControl control, Point point)
    {
        UIElement element = control.InputHitTest(point) as UIElement;
        while ((element != null) && (element != control))
        {
            object item = control.ItemContainerGenerator.ItemFromContainer(element);
            if (item != DependencyProperty.UnsetValue)
                return item;
    
            element = VisualTreeHelper.GetParent(element) as UIElement;
        }
              
        return null;
    }
    
    Qui la cosa è un poco più complicata comincia a guardarlo e poi ne parliamo
  • Re: Drag and drop

    Effettivamente non ci capisco niente! Ora lo studio poi ti chiedo.
  • Re: Drag and drop

    Intanto ti scrivo anche la parte relativa al drop:
    
    private void listBox2_Drop(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent("myObject"))
        {
            MyObject ob = e.Data.GetData("myObject") as MyObject;
            listBox2.Items.Add(ob);
        }
    
        if (e.Data.GetDataPresent("myObjectList"))
        {
            IList list = e.Data.GetData("myObjectList") as IList;
            foreach(MyObject ob in list)
                listBox2.Items.Add(ob);
        }
    }
    
    Questa parte è più semplice e forse aiuta a capire anche la prima parte.
  • Re: Drag and drop

    Mi è poco chiaro l' uso di myObject e myObjectList.
  • Re: Drag and drop

    L' esempio è più complicato del dovuto perché il drop parte da una ListBox (lo hai chiesti tu, io non c' entro . )

    La list box permette di selezionare uno o più elementi, e questi due casi vanno distinti. Se si seleziona un solo elemento si inserisce nella clipboard un oggetto singolo, se se ne selezionano molti bisona inserire nella clipboard una lista.
  • Re: Drag and drop

    Ok, ma myObject da dove salta fuori?
  • Re: Drag and drop

    MyObject è la classe degli oggetti contenuti nella ListBox. La ListBox mostra si delle stringhe ma generalmente in WPF sono collegate tramite binding a degli oggetti, oggetti che puoi copiare nella clipboard.
  • Re: Drag and drop

    Stupendo! Ora è perfettamente chiaro.
    A buon rendere, grazie.
Devi accedere o registrarti per scrivere nel forum
22 risposte