I have been attempting to incorporate the Drag and Drop example for two listBoxes. Yet, when i drag my item it just shows the text and not the item template from the listBox. I have included a image to show what i am talking about...
any help would be great... im still relatively new to the WPF game... i apologize in advance...
private void OnDragInfo(object sender, DragDropEventArgs e) { if (e.Options.Status == DragStatus.DragComplete) { var listBox = e.Options.Source.FindItemsConrolParent() as ItemsControl; var itemsSource = listBox.ItemsSource as IList; var operation = e.Options.Payload as DragDropOperation; itemsSource.Remove(operation.Payload); } } private void OnDropInfo(object sender, DragDropEventArgs e) { var destination = e.Options.Destination; if (e.Options.Status == DragStatus.DropPossible && destination is ListBoxItem) { var listBox = destination.FindItemsConrolParent() as ListBox; FrameworkElement rootChild = VisualTreeHelper.GetChild(listBox, 0) as FrameworkElement; Storyboard dropStoryboard = rootChild.FindResource("DropStoryboard") as Storyboard; dropStoryboard.Begin(); //Get the DropCueElemet: var dropCueElement = (VisualTreeHelper.GetChild(listBox, 0) as FrameworkElement).FindName("DropCueElement") as FrameworkElement; var operation = e.Options.Payload as DragDropOperation; //Get the parent of the destination: var visParent = VisualTreeHelper.GetParent(destination) as UIElement; //Get the spacial relation between the destination and its parent: var destinationStackTopLeft = destination.TransformToVisual(visParent).Transform(new Point()); var yTranslateValue = operation.DropPosition == DropPosition.Before ? destinationStackTopLeft.Y : destinationStackTopLeft.Y + destination.ActualHeight; dropCueElement.RenderTransform = new TranslateTransform() { Y = yTranslateValue }; e.Handled = true; } if (e.Options.Status == DragStatus.DropPossible && destination is ListBox) { var listBox = destination as ListBox; FrameworkElement rootChild = VisualTreeHelper.GetChild(listBox, 0) as FrameworkElement; Storyboard dropStoryboard = rootChild.FindResource("DropStoryboard") as Storyboard; dropStoryboard.Begin(); //Get the DropCueElemet: var dropCueElement = (VisualTreeHelper.GetChild(listBox, 0) as FrameworkElement).FindName("DropCueElement") as FrameworkElement; var operation = e.Options.Payload as DragDropOperation; // Get the size of the items: var itemsPresenter = listBox.GetTemplateChild<FrameworkElement>("ItemsPresenterElement"); var panel = VisualTreeHelper.GetChild(itemsPresenter, 0) as Panel; if (panel != null) { var yTranslateValue = panel.ActualHeight; dropCueElement.RenderTransform = new TranslateTransform() { Y = yTranslateValue }; } } //Hide the DropCue: if (e.Options.Status == DragStatus.DropImpossible || e.Options.Status == DragStatus.DropCancel || e.Options.Status == DragStatus.DropComplete) { var listBox = destination as ListBox; if (listBox == null) { listBox = e.Options.Destination.FindItemsConrolParent() as ListBox; } FrameworkElement rootChild = VisualTreeHelper.GetChild(listBox, 0) as FrameworkElement; Storyboard dropStoryboard = rootChild.FindResource("DropStoryboard") as Storyboard; dropStoryboard.Stop(); } //Place the item: if (e.Options.Status == DragStatus.DropComplete && destination is ListBoxItem) { var listBox = e.Options.Destination.FindItemsConrolParent() as ListBox; var itemsSource = listBox.ItemsSource as IList; var destinationIndex = itemsSource.IndexOf(e.Options.Destination.DataContext); var operation = e.Options.Payload as DragDropOperation; var insertIndex = operation.DropPosition == DropPosition.Before ? destinationIndex : destinationIndex + 1; itemsSource.Insert(insertIndex, operation.Payload); listBox.Dispatcher.BeginInvoke(new Action(() => { listBox.SelectedIndex = insertIndex; })); } //Place the item: if (e.Options.Status == DragStatus.DropComplete && destination is ListBox) { var listBox = e.Options.Destination as ListBox; var itemsSource = listBox.ItemsSource as IList; var operation = e.Options.Payload as DragDropOperation; itemsSource.Add(operation.Payload); } } private void OnDropQuery(object sender, DragDropQueryEventArgs e) { var destination = e.Options.Destination; if (e.Options.Status == DragStatus.DropDestinationQuery && destination is ListBoxItem) { var listBox = destination.FindItemsConrolParent() as ListBox; //Cannot place na item relative to itself: if (e.Options.Source == e.Options.Destination) { return; } //Get the spatial relation between the destination item and the vis. root: var destinationTopLeft = destination.TransformToVisual(Window.GetWindow(destination)).Transform(new Point()); //Should the new Item be moved before or after the destination item?: bool placeBefore = (e.Options.CurrentDragPoint.Y - destinationTopLeft.Y) < destination.ActualHeight / 2; var operation = e.Options.Payload as DragDropOperation; operation.DropPosition = placeBefore ? DropPosition.Before : DropPosition.After; e.QueryResult = true; e.Handled = true; } if (e.Options.Status == DragStatus.DropDestinationQuery && destination is ListBox) { var listBox = destination as ListBox; // Cannot drop the last or only item of the list box within the same list box: var operation = e.Options.Payload as DragDropOperation; //if (listBox.ItemsSource != null && listBox.ItemsSource.Cast<object>().Last() != operation.Payload) //{ e.QueryResult = true; e.Handled = true; //} //else //{ // e.QueryResult = false; // e.Handled = true; //} } } private void OnDragQuery(object sender, DragDropQueryEventArgs e) { if (e.Options.Status == DragStatus.DragQuery) { var sourceControl = e.Options.Source; e.QueryResult = true; e.Handled = true; var dragCue = RadDragAndDropManager.GenerateVisualCue(sourceControl); dragCue.HorizontalAlignment = HorizontalAlignment.Left; dragCue.Content = sourceControl.DataContext; e.Options.DragCue = dragCue; e.Options.Payload = new DragDropOperation() { Payload = sourceControl.DataContext }; } if (e.Options.Status == DragStatus.DropSourceQuery) { e.QueryResult = true; e.Handled = true; } }