5

Sono davvero lottando per ottenere un semplice drag and drop del campione lavora in Silverlight 4.Silverlight DragDrop.DoDragDrop()

Ecco quello che ho:

XAML

<UserControl x:Class="TestDragDrop.MainPage" Width="350" Height="200" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid Background="White"> 
     <Rectangle Margin="50,50,200,50" Fill="Orange" MouseLeftButtonDown="r1_MouseLeftButtonDown" /> 
     <Rectangle Margin="200,50,50,50" Fill="Orange" AllowDrop="true" Drop="r2_Drop" /> 
    </Grid> 
</UserControl> 

Code-Behind

public partial class MainPage : UserControl 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
    } 

    private void r1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     DragDrop.DoDragDrop((Rectangle)sender, "test data", DragDropEffects.All, DragDropKeyStates.LeftMouseButton); 
    } 

    private void r2_Drop(object sender, System.Windows.DragEventArgs e) 
    { 
     MessageBox.Show("Drop: " + e.Data.ToString()); 
    } 
} 

L'evento DragDrop.DragDropCompleted si attiva, tuttavia il parametro del mittente è sempre nullo e gli argomenti dell'evento non mi aiutano molto a trovare ulteriori informazioni sull'evento.

Ho anche provato a utilizzare un controllo personalizzato implementando IAcceptDrop senza fortuna.

Inoltre, quando avvio l'operazione di trascinamento, non ho feedback visivo sul fatto che qualcosa stia accadendo (nessun cambiamento nel cursore o altro). C'è qualcosa di sbagliato?

Tutti gli esempi che ho trovato utilizzano DragDropTargets. Il mio unico resort è quello di implementare un DragDropTarget per il particolare tipo di controlli che voglio usare?

risposta

5

La funzione di trascinamento della selezione di Silverlight 4 era mirata a un singolo scenario: il trascinamento di un file dal computer in un'applicazione Silverlight. Qualunque cosa al di là di questo è necessario utilizzare i controlli DragDropTarget del Toolkit. La descrizione della funzione di drag/drop da Tim Heuer: http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx

Per alcuni scenari, potrebbe essere voluto essere in grado di trascinare un file dal desktop o file explorer al vostra applicazione Silverlight. Con abilitando l'attributo AllowDrop su UIElement in questa versione, ora è possibile ospitare tali scenari.

In altre parole, non avevano intenzione di darti la possibilità di creare effettivamente le tue operazioni di trascinamento nel codice.

La maggior parte, se non tutti, della sezione "Limitazioni" da questo URL ancora applicano a SL4 RTW: http://www.ningzhang.org/2009/11/28/silverlight-drag-and-drop-api/

  • v'è alcun supporto fonte goccia (QueryContinueDrag & GiveFeedback).
  • non c'è DragDropEffects o DragDropKeyStates in DragEventArgs.
  • non è visibile l'oggetto trascinato o DragDropEffects.
  • è supportato solo il trascinamento di file: tutti gli eventi di rilascio drop si attivano solo quando i file vengono trascinati e rilasciati. IDataObject, DataObject e DragEventArgs.Data supportano solo un formato: "FileDrop" ei dati sono di tipo FileInfo [].
  • la maggior parte dei metodi IDataObject lanciano NotImplementedException.
+0

Grazie per la risposta. Sto usando il metodo DragDrop.DoDragDrop() dal Toolkit. Precedentemente c'era una proprietà AllowDrop allegata dal Toolkit, ma questa era stata rimossa in SL4. Suppongo che la proprietà della struttura l'abbia sostituita? –

+0

Sì, è possibile utilizzare la proprietà AllowDrop del framework. –

+0

Grazie per aver spiegato cosa nessuno si è preso la briga di dire. –