Hi, I've tried to reproduce the "Getting Started" example of DragAndDrop but I can't make it work (drag event not fired).
Here my XAML code:
And here my C# code:
Can anyone help me?
Thank You
Sergio
Here my XAML code:
<UserControl xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" x:Class="WpfApplication5.GettingStarted" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> <UserControl.Resources> <DataTemplate x:Key="ApplicationDragTemplate"> <Image Source="{Binding IconPath}" Stretch="None" VerticalAlignment="Top" /> </DataTemplate> <Style TargetType="ListBoxItem" x:Key="draggableItemStyle"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="telerik:RadDragAndDropManager.AllowDrag" Value="True" /> </Style> </UserControl.Resources> <Grid x:Name="LayoutRoot" Background="White"> <Grid.ColumnDefinitions> <ColumnDefinition Width="200" /> <ColumnDefinition Width="150" /> <ColumnDefinition Width="200" /> </Grid.ColumnDefinitions> <ListBox x:Name="allApplicationsBox" telerik:RadDragAndDropManager.AllowDrop="True" ItemContainerStyle="{StaticResource draggableItemStyle}"> <ListBox.ItemTemplate> <DataTemplate> <Grid Width="150"> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Image Grid.Row="0" HorizontalAlignment="Center" Source="{Binding IconPath}" Width="32" Height="32" Margin="0 0 5 0" /> <TextBlock Grid.Row="1" Text="{Binding Name}" FontWeight="Bold" HorizontalAlignment="Center" /> <TextBlock Text="{Binding Author}" Grid.Row="2" HorizontalAlignment="Center" /> </Grid> </DataTemplate> </ListBox.ItemTemplate> </ListBox> <!--My Applications--> <ListBox x:Name="myApplicationsBox" telerik:RadDragAndDropManager.AllowDrop="True" ItemContainerStyle="{StaticResource draggableItemStyle}" Grid.Column="2"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> <Image Source="{Binding IconPath}" Margin="0 0 3 0" HorizontalAlignment="Center" /> <TextBlock Text="{Binding Name}" HorizontalAlignment="Center" /> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> <ListBox.ItemsPanel> <ItemsPanelTemplate> <telerik:RadUniformGrid Columns="3" HorizontalAlignment="Left" VerticalAlignment="Top" /> </ItemsPanelTemplate> </ListBox.ItemsPanel> </ListBox> </Grid></UserControl>And here my C# code:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using System.Collections.ObjectModel;using Telerik.Windows.Controls.DragDrop;using Telerik.Windows.Controls;namespace WpfApplication5{ public class ApplicationInfo { public ApplicationInfo(string iconPath, string name, string author) { this.IconPath = iconPath; this.Name = name; this.Author = author; } public String IconPath { get; set; } public String Name { get; set; } public String Author { get; set; } } public partial class GettingStarted : UserControl { public static ObservableCollection<ApplicationInfo> GenerateApplicationInfos() { ObservableCollection<ApplicationInfo> data = new ObservableCollection<ApplicationInfo>(); for (int i = 1; i <= 5; i++) { data.Add(new ApplicationInfo("Images/nature" + i + ".jpg", "Nome" + i, "Autore" + 1)); } return data; } private ObservableCollection<ApplicationInfo> allApplications = GenerateApplicationInfos(); private ObservableCollection<ApplicationInfo> myApplications = new ObservableCollection<ApplicationInfo>(); public GettingStarted() { InitializeComponent(); allApplicationsBox.ItemsSource = allApplications; myApplicationsBox.ItemsSource = myApplications; RadDragAndDropManager.AddDragQueryHandler(this, OnDragQuery); RadDragAndDropManager.AddDragInfoHandler(this, OnDragInfo); RadDragAndDropManager.AddDropQueryHandler(this, OnDropQuery); RadDragAndDropManager.AddDropInfoHandler(this, OnDropInfo); } // OnDragQuery event handler private void OnDragQuery(object sender, DragDropQueryEventArgs e) { ListBoxItem listBoxItem = e.Options.Source as ListBoxItem; ListBox box = ItemsControl.ItemsControlFromItemContainer(listBoxItem) as ListBox; if (e.Options.Status == DragStatus.DragQuery && box != null) { e.Options.Payload = box.SelectedItem; ContentControl cue = new ContentControl(); cue.ContentTemplate = this.Resources["ApplicationDragTemplate"] as DataTemplate; cue.Content = box.SelectedItem; e.Options.DragCue = cue; e.Options.ArrowCue = RadDragAndDropManager.GenerateArrowCue(); } e.QueryResult = true; } // OnDropQuery event handler private void OnDropQuery(object sender, DragDropQueryEventArgs e) { ItemsControl box = e.Options.Destination as ItemsControl; IList<ApplicationInfo> itemsSource = box.ItemsSource as IList<ApplicationInfo>; ApplicationInfo payload = e.Options.Payload as ApplicationInfo; e.QueryResult = payload != null && !itemsSource.Contains(payload); } // OnDropInfo event handler private void OnDropInfo(object sender, DragDropEventArgs e) { ItemsControl box = e.Options.Destination as ItemsControl; IList<ApplicationInfo> itemsSource = box.ItemsSource as IList<ApplicationInfo>; ApplicationInfo payload = e.Options.Payload as ApplicationInfo; if (e.Options.Status == DragStatus.DropComplete) if (!itemsSource.Contains(payload)) itemsSource.Add(payload); } // OnDragInfo event handler private void OnDragInfo(object sender, DragDropEventArgs e) { ListBoxItem listBoxItem = e.Options.Source as ListBoxItem; ListBox box = ItemsControl.ItemsControlFromItemContainer(listBoxItem) as ListBox; IList<ApplicationInfo> itemsSource = box.ItemsSource as IList<ApplicationInfo>; ApplicationInfo payload = e.Options.Payload as ApplicationInfo; if (e.Options.Status == DragStatus.DragComplete) { if (payload != null && itemsSource.Contains(payload)) { itemsSource.Remove(payload); } } } }}Can anyone help me?
Thank You
Sergio