When the list box lives inside a RadTileView, the OnDrop event will get fired twice with the same parameters.
<
telerik:RadTileView
>
<
telerik:RadTileViewItem
>
<
Grid
x:Name
=
"LayoutRoot"
Background
=
"White"
>
<
Grid.Resources
>
<
Style
TargetType
=
"ListViewItem"
>
<
Setter
Property
=
"telerik:DragDropManager.AllowCapturedDrag"
Value
=
"True"
></
Setter
>
</
Style
>
<
DataTemplate
x:Key
=
"ApplicationTemplate"
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
TextBlock
Margin
=
"5"
Text
=
"{Binding Name}"
VerticalAlignment
=
"Center"
></
TextBlock
>
</
StackPanel
>
</
DataTemplate
>
</
Grid.Resources
>
<
Grid.ColumnDefinitions
>
<
ColumnDefinition
></
ColumnDefinition
>
<
ColumnDefinition
></
ColumnDefinition
>
</
Grid.ColumnDefinitions
>
<
ListView
x:Name
=
"ApplicationList"
ItemTemplate
=
"{StaticResource ApplicationTemplate}"
AllowDrop
=
"True"
/>
<
ListView
x:Name
=
"MyAppList"
Background
=
"Gray"
Grid.Column
=
"1"
ItemTemplate
=
"{StaticResource ApplicationTemplate}"
AllowDrop
=
"True"
/>
</
Grid
>
</
telerik:RadTileViewItem
>
</
telerik:RadTileView
>
public
partial
class
MainWindow : Window
{
public
MainWindow()
{
InitializeComponent();
ObservableCollection<Item> items =
new
ObservableCollection<Item>();
for
(
int
i = 1; i <= 10; i++)
items.Add(
new
Item() { Name =
string
.Format(
"item {0}"
, i) });
ApplicationList.ItemsSource = items;
MyAppList.ItemsSource =
new
ObservableCollection<Item>();
DragDropManager.AddDragInitializeHandler(ApplicationList, OnDragInitialize);
DragDropManager.AddDragInitializeHandler(MyAppList, OnDragInitialize);
DragDropManager.AddGiveFeedbackHandler(ApplicationList, OnGiveFeedback);
DragDropManager.AddGiveFeedbackHandler(MyAppList, OnGiveFeedback);
DragDropManager.AddDragDropCompletedHandler(ApplicationList, OnDragCompleted);
DragDropManager.AddDragDropCompletedHandler(MyAppList, OnDragCompleted);
DragDropManager.AddDropHandler(ApplicationList, OnDrop);
DragDropManager.AddDropHandler(MyAppList, OnDrop);
}
private
void
OnDragInitialize(
object
sender, DragInitializeEventArgs args)
{
args.AllowedEffects = DragDropEffects.Move;
//args.AllowedEffects = DragDropEffects.All;
args.Data = ((FrameworkElement)args.OriginalSource).DataContext;
args.DragVisual =
new
ContentControl { Content = args.Data, ContentTemplate = LayoutRoot.Resources[
"ApplicationTemplate"
]
as
DataTemplate };
}
private
void
OnGiveFeedback(
object
sender, Telerik.Windows.DragDrop.GiveFeedbackEventArgs args)
{
System.Diagnostics.Trace.WriteLine(
string
.Format(
"{0} - OnGiveFeedback sender={1}"
, DateTime.Now, sender));
args.SetCursor(Cursors.Arrow);
args.Handled =
true
;
}
private
void
OnDrop(
object
sender, Telerik.Windows.DragDrop.DragEventArgs args)
{
System.Diagnostics.Trace.WriteLine(
string
.Format(
"{0} - OnDrop sender={1}"
, DateTime.Now, sender));
((IList)(sender
as
ListBox).ItemsSource).Add(((DataObject)args.Data).GetData(
typeof
(Item)));
}
public
void
OnDragCompleted(
object
sender, Telerik.Windows.DragDrop.DragDropCompletedEventArgs args)
{
System.Diagnostics.Trace.WriteLine(
string
.Format(
"{0} - OnDragCompleted sender={1}"
, DateTime.Now, sender));
((IList)(sender
as
ListBox).ItemsSource).Remove(args.Data);
}
}
public
class
Item
{
public
string
Name {
get
;
set
; }
}