WPF C # Drag & Drop Events - PullRequest
       1

WPF C # Drag & Drop Events

2 голосов
/ 16 апреля 2011

У меня есть холст, на который я добавляю некоторые инструменты для создания диаграммы (это находится в 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 для моего холста, поэтому я все еще застрял.

Ответы [ 3 ]

0 голосов
/ 16 апреля 2011

вы смотрели на событие drop ?В основном, в .net / wpf 4 есть класс DragDrop, чтобы помочь с этими вопросами. Здесь - документация MSDN по этому вопросу.

[РЕДАКТИРОВАТЬ]

Из того, что я вижу, вы перетаскиваете изображение.Я думаю, что вам нужно сделать вместо этого создать какой-то пользовательский объект, содержащий ваше изображение и некоторые данные.если вы сделаете изображение свойством зависимости, вы можете привязать его к своему элементу списка, а затем в событии удаления получить доступ к другим свойствам, чтобы получить нужные данные.

0 голосов
/ 16 апреля 2011

есть только одно событие для каждой цели сброса.любую информацию, связанную с источником, которую вы хотите использовать в этом обработчике, следует передать как часть параметра данных в DoDragDrop

0 голосов
/ 16 апреля 2011

Думаю, эта статья поможет вам.Есть также часть 2 и часть 3 .

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...