У меня есть холст, на который я добавляю некоторые инструменты для создания диаграммы (это находится в tabitem2).
То, что я хочу сделать, - это когда инструмент, брошенный на холст, связывает событие, которое выплевывает текст в текстовое поле (расположенное в tabitem3).
XAML:
<ListBox>
<ListBox.Resources>
<Style TargetType="{x:Type Image}">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="100"/>
<EventSetter Event="MouseLeftButtonDown" Handler="DragImage"/>
</Style>
</ListBox.Resources>
<ListBoxItem>
<Image Source="toolitem1.png"></Image>
</ListBoxItem>
</ListBox>
<Canvas x:Name="Canvas" AllowDrop="True" Background="Aqua" Drop="DropImage"/>
Код сзади:
private void DragImage(object sender, MouseButtonEventArgs e)
{
Image image = e.Source as Image;
DataObject data = new DataObject(typeof(ImageSource), image.Source);
DragDrop.DoDragDrop(image, data, DragDropEffects.Copy);
}
private void DropImage(object sender, DragEventArgs e)
{
ImageSource image = e.Data.GetData(typeof(ImageSource)) as ImageSource;
Image imageControl = new Image() { Width = image.Width, Height = image.Height, Source = image };
Canvas.SetLeft(imageControl, e.GetPosition(this.Canvas).X);
Canvas.SetTop(imageControl, e.GetPosition(this.Canvas).Y);
this.Canvas.Children.Add(imageControl);
}
UPDATE:
Добавил некоторый пример кода и попробовал предложения от людей ниже, но безрезультатно. Похоже, что когда я пытаюсь использовать DragDrop.Drop в моем объекте ListBoxItem, он переопределяет событие DropImage для моего холста, поэтому я все еще застрял.