5

ja naprawdę stara się uzyskać prosty przeciągnij i upuść próbki pracy w Silverlight 4.Silverlight DragDrop.DoDragDrop()

Oto co mam:

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> 

Kod-za

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

Zdarzenie DragDrop.DragDropCompleted jest uruchamiane, jednak parametr nadawcy jest zawsze pusty, a argumenty zdarzenia nie pomagają mi znaleźć więcej informacji o zdarzeniu.

Próbowałem również użyć niestandardowego kontrolera implementującego IAcceptDrop bez powodzenia.

Ponadto, gdy uruchamiam operację przeciągania, nie mam wizualnego sprzężenia zwrotnego, że coś się dzieje (bez zmiany kursora lub czegokolwiek). Czy jest coś nie tak?

Wszystkie znalezione przeze mnie próbki wykorzystują DragDropTargets. Czy moja jedyna metoda implementacji DragDropTarget dla określonego typu kontrolek, których chcę użyć?

Odpowiedz

5

Funkcja przeciągania i upuszczania w programie Silverlight 4 była ukierunkowana na jeden scenariusz: przeciągnięcie pliku z komputera do aplikacji Silverlight. Wszystko, co jest poza tym, musisz użyć kontrolek DragDropTarget narzędzia Toolkit. Opis funkcji drag/drop od Tim Heuer: http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx

Dla niektórych scenariuszach może masz chciał, aby móc przeciągnąć plik z pulpicie lub Eksploratora plików na swojej aplikacji Silverlight. Aby włączyć atrybut AllowDrop na UIElement w tym wydaniu, można teraz uwzględnić te scenariusze.

Innymi słowy, nie planowano oferowania możliwości tworzenia własnych operacji przeciągania w kodzie.

Większość, jeśli nie wszystkie, z sekcji "Ograniczenia" z tego adresu URL nadal zastosowanie do SL4 RTW: http://www.ningzhang.org/2009/11/28/silverlight-drag-and-drop-api/

  • nie ma wsparcia źródło drop (QueryContinueDrag & GiveFeedback).
  • Brak DragDropEffects lub DragDropKeyStates w DragEventArgs.
  • Brak wizualnego dla przeciągniętego obiektu lub DragDropEffects.
  • Obsługiwane jest tylko przeciąganie i upuszczanie pliku: wszystkie zdarzenia docelowe upuszczania są uruchamiane tylko wtedy, gdy pliki są przeciągane i usunięte. IDataObject, DataObject i DragEventArgs.Data obsługują tylko jeden format: "FileDrop", a dane są typu FileInfo [].
  • Większość metod IDataObject rzuca wyjątek NotImplementedException.
+0

Dzięki za odpowiedź. Używam metody DragDrop.DoDragDrop() z Toolkit. Wcześniej była również dołączona właściwość AllowDrop z zestawu narzędzi, ale ta została usunięta w SL4. Rozumiem, że właściwość ramowa go zastąpiła? –

+0

Tak, można użyć właściwości AllowDrop ramki. –

+0

Dziękuję za wyjaśnienie, czego nikt w SM nie chciał powiedzieć. –