Silverlight DragDrop.DoDragDrop () - PullRequest
       31

Silverlight DragDrop.DoDragDrop ()

5 голосов
/ 06 октября 2010

Я действительно изо всех сил пытаюсь получить простой образец перетаскивания, работающий в Silverlight 4.

Вот что у меня есть:

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

Событие DragDrop.DragDropCompleted срабатывает, однако параметр sender всегда равен нулю, и аргументы события не помогают мне узнать больше о событии.

Я также безуспешно пытался использовать пользовательский элемент управления, реализующий IAcceptDrop.

Кроме того, когда я запускаю операцию перетаскивания, у меня нет визуальной информации о том, что что-то происходит (без изменения курсора или чего-либо еще). Что-то не так?

Все примеры, которые я нашел, используют DragDropTargets. Является ли мой единственный способ реализовать DragDropTarget для конкретного типа элементов управления, которые я хочу использовать?

1 Ответ

5 голосов
/ 07 октября 2010

Функция перетаскивания Silverlight 4 была нацелена на один сценарий: перетаскивание файла с вашего компьютера в приложение Silverlight.Все, что кроме этого, вам нужно использовать элементы управления DragDropTarget Toolkit.Описание функции перетаскивания из Tim Heuer: http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx

Для некоторых сценариев вы, возможно, хотели иметь возможность перетаскивать файл с рабочего стола или из проводника в приложение Silverlight.,Включив атрибут AllowDrop для UIElement в этом выпуске, вы теперь можете учитывать эти сценарии.

Другими словами, они не планировали давать вам возможность фактически создавать свои собственные операции перетаскивания в коде.

Большинство, если не все, раздел «Ограничения» из этого URL-адреса по-прежнему применяется к SLW RTW: http://www.ningzhang.org/2009/11/28/silverlight-drag-and-drop-api/

  • поддержка источника отбрасывания отсутствует (QueryContinueDrag& Дать обратную связь).
  • в DragEventArgs отсутствуют DragDropEffects или DragDropKeyStates.
  • отсутствует визуализация для перетаскиваемого объекта или DragDropEffects.
  • поддерживается только перетаскивание файлов: все целевые события удаления запускаются только при перетаскивании файлов.IDataObject, DataObject и DragEventArgs.Data поддерживают только один формат: «FileDrop», и данные имеют тип FileInfo [].
  • большинство методов IDataObject генерируют исключение NotImplementedException.
...