5

ich wirklich kämpfen, um einen einfachen Drag zu bekommen und Probe fallen in Silverlight arbeiten 4.Silverlight DragDrop.DoDragDrop()

Hier ist, was ich habe:

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()); 
    } 
} 

Das Ereignis DragDrop.DragDropCompleted löst zwar aus, der Absenderparameter ist jedoch immer null, und die Ereignisargumente helfen mir nicht, mehr über das Ereignis zu erfahren.

Ich habe auch versucht, ein benutzerdefiniertes Steuerelement zu verwenden, das IAcceptDrop ohne Glück implementiert.

Auch wenn ich den Ziehvorgang starte, habe ich keine visuelle Rückmeldung, dass etwas passiert (keine Änderung des Cursors oder irgendetwas). Stimmt irgendetwas nicht?

Alle Beispiele, die ich gefunden habe, verwenden die DragDropTargets. Ist meine einzige Möglichkeit, ein DragDropTarget für den bestimmten Typ von Steuerelementen zu implementieren, den ich verwenden möchte?

Antwort

5

Die Drag & Drop-Funktion von Silverlight 4 war auf ein einzelnes Szenario ausgerichtet: Ziehen einer Datei von Ihrem Computer auf eine Silverlight-Anwendung. Alles andere als das bei Ihnen müssen die DragDropTarget-Steuerelemente des Toolkits verwenden. Die Beschreibung des Drag/Drop-Funktion von Tim Heuer: http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx

Für einige Szenarien kann man von Ihrem Desktop oder Datei-Explorer auf Ihre Silverlight-Anwendung, eine Datei zu ziehen in der Lage sein wollte. Durch Aktivieren des Attributs AllowDrop auf UIElement in dieser Version können Sie jetzt diese Szenarien unterbringen.

Mit anderen Worten, sie haben nicht geplant, Ihnen die Möglichkeit zu geben, Ihre eigenen Ziehoperationen in Code tatsächlich zu erstellen.

Die meisten, wenn nicht alle, die "Einschränkungen" Abschnitt von dieser URL gelten noch bis SL4 RTW: http://www.ningzhang.org/2009/11/28/silverlight-drag-and-drop-api/

  • gibt es keine Drop-Source-Unterstützung (QueryContinueDrag & Givefeedback).
  • Es gibt keine DragDropEffects oder DragDropKeyStates in DragEventArgs.
  • gibt es keine visuelle für das gezogene Objekt oder DragDropEffects.
  • nur Datei Drag & Drop wird unterstützt: alle Drop-Zielereignisse Feuer nur, wenn Dateien gezogen werden und gelöscht. IDataObject, DataObject und DragEventArgs.Data unterstützen nur ein Format: "FileDrop", und die Daten ist vom Typ FileInfo [].
  • Die meisten IDataObject-Methoden werfen NotImplementedException.
+0

Danke für Ihre Antwort. Ich verwende die DragDrop.DoDragDrop() -Methode aus dem Toolkit. Zuvor gab es eine angehängte AllowDrop-Eigenschaft aus dem Toolkit, die aber in SL4 entfernt wurde. Ich nehme an, dass die Framework-Eigenschaft es ersetzt hat? –

+0

Ja, Sie können die AllowDrop-Eigenschaft des Frameworks verwenden. –

+0

Vielen Dank für die Erklärung, die niemand bei MS zu sagen pflegte. –