Перетаскивание элемента из DataGridDragDropTarget в метку - PullRequest
1 голос
/ 22 января 2012

Я использую ListBoxDragDropTarget из Silverlight Toolkit (апрель 2010 г.) с SL 4.

Я хочу перетащить элементы из списка в Label и обработать событие перетаскивания там.

Однако это кажется немного сложным.Обычное Drop событие Label никогда не срабатывает.Я предполагаю, что это потому, что Silverlight Toolkit имеет свой собственный способ обработки Drag & Drop, который только частично совместим.

Осматривая окружение, я нашел Microsoft.Windows.DragDrop.DropEvent и прикрепил обработчик к этому событию.И это сработало !!Я получил событие Drop.Однако я не уверен, как добраться до реального перетаскиваемого объекта (string).

Я пытался e.Data.GetData(typeof(string)), но ничего не получил.Глядя на доступные форматы, есть объект System.Windows.Controls.ItemDragEventArgs.В этом я нашел массив System.Collections.ObjectModel.Selection, который затем имеет свойство Item.Я предполагаю, что в этом свойстве Item я нахожу свой объект, но весь метод кажется немного хрупким, и я не уверен, что это официальный способ сделать это.

Есть ли лучший способ?

1 Ответ

0 голосов
/ 10 февраля 2012

U также может использовать другой ListBox Например: включите пространство имен

 xmlns:toolKit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"

Давайте добавим «ListBoxDragDropTarget внутри сетки. Установите для атрибута «AllowDrop» значение True. Как только он будет установлен в true, он сможет перехватить событие drop внутри элемента управления. Теперь мы добавим ListBox внутри ListBoxDragDropTarget и установим свойства по вашему желанию. Предположим,

 <toolKit:ListBoxDragDropTarget AllowDrop="True">
   <ListBox x:Name="customerListBoxMain" Height="200" Width="200"
       DisplayMemberPath="Name">
    <ListBox.ItemsPanel>
      <ItemsPanelTemplate>
           <StackPanel Orientation="Vertical"/>
      </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
   </ListBox>
  </toolKit:ListBoxDragDropTarget>

И добавить еще один ListBox

  <toolKit:ListBoxDragDropTarget AllowDrop="True">
    <ListBox Height="200" Width="200" DisplayMemberPath="Name">
   <ListBox.ItemsPanel>
    <ItemsPanelTemplate>
      <StackPanel Orientation="Vertical"/>
    </ItemsPanelTemplate>
   </ListBox.ItemsPanel>
   </ListBox>
  </toolKit:ListBoxDragDropTarget>

Теперь, чтобы получить некоторые данные и установить их в Source первого ListBox из кода позади. Вот пример кода:

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

        customerListBoxMain.ItemsSource = PersonDataProvider.GetData();
     }
   }

Готово ..

...