Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
4 / 4 / 0
Регистрация: 07.05.2013
Сообщений: 28
1

Drag and Drop WPF

15.06.2013, 18:59. Показов 1897. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть приложение, которое позволяет перетаскивать картинки из левой панели в правую, как реализовать драг&дроп внутри canvas? что бы картинку которую я уже перетащил можно было мышкой перемещать по экрану:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<Window x:Class="WpfApplication16.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="600" Width="800" WindowStartupLocation="CenterScreen" WindowStyle="ToolWindow">
    <Grid>
        <DockPanel Background="AntiqueWhite">
            <ListBox Background="Gray" Width="184">
                <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/>
                <TextBlock Background="White" FontSize="25" Width="170">   Пол   </TextBlock>
                <ComboBox Width="171">
                    <ComboBoxItem>
                        <Image    Source="E:\cont\floor\1.jpg" />
                    </ComboBoxItem>
                </ComboBox>
                <TextBlock Background="White" FontSize="25" Width="170"><Run Text="Стулья"/></TextBlock>
                <ComboBox Width="171">
                    <ComboBoxItem>
                        <Image    Source="1.jpg" />
                    </ComboBoxItem>
                </ComboBox>
                <TextBlock Background="White" FontSize="25" Width="170"><Run Text="Столы"/></TextBlock>
                <ComboBox Width="171">
                    <ComboBoxItem>
                        <Image    Source="1.jpg" />
                    </ComboBoxItem>
                </ComboBox>
                <TextBlock Background="White" FontSize="25" Width="170"><Run Text="Шкафы"/></TextBlock>
                <ComboBox Width="171">
                    <ComboBoxItem>
                        <Image    Source="1.jpg" />
                    </ComboBoxItem>
                </ComboBox>
            </ListBox>
            <Canvas x:Name="Canvas" 
                    MouseLeftButtonDown="Canvas_MouseLeftButtonDown_1" MouseMove="Canvas_MouseMove_1"  MouseLeftButtonUp="Canvas_MouseLeftButtonUp_1" 
                    AllowDrop="True"  Background="AntiqueWhite" Drop="DropImage"/>
        </DockPanel>
 
    </Grid>
</Window>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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;
 
namespace WpfApplication16
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        bool isMouseCaptured;
        double mouseVerticalPosition;
        double mouseHorizontalPosition;
 
        public MainWindow()
        {
            InitializeComponent();
        }
 
        
 
        private void Canvas_MouseLeftButtonDown_1(object sender, MouseButtonEventArgs args)
        {
            Image item = sender as Image;
            mouseVerticalPosition = args.GetPosition(null).Y;
            mouseHorizontalPosition = args.GetPosition(null).X;
            isMouseCaptured = true;
            item.CaptureMouse();
        }
 
        private void Canvas_MouseMove_1(object sender, MouseEventArgs args)
        {
            Image item = sender as Image;
            if (isMouseCaptured)
            {
                //расчет текущей позиции
                double deltaV = args.GetPosition(null).Y - mouseVerticalPosition;
                double deltaH = args.GetPosition(null).X - mouseHorizontalPosition;
                double newTop = deltaV + (double)item.GetValue(Canvas.TopProperty);
                double newLeft = deltaH + (double)item.GetValue(Canvas.LeftProperty);
                //передача значения новой позиции объекту
                item.SetValue(Canvas.TopProperty, newTop);
                item.SetValue(Canvas.LeftProperty, newLeft);
                //обновление глобального значения позиции
                mouseVerticalPosition = args.GetPosition(null).Y;
                mouseHorizontalPosition = args.GetPosition(null).X;
            }
        }
 
        private void Canvas_MouseLeftButtonUp_1(object sender, MouseButtonEventArgs args)
        {
            Image item = sender as Image;
            isMouseCaptured = false;
            item.ReleaseMouseCapture();
            mouseVerticalPosition = -1;
            mouseHorizontalPosition = -1;
        }
 
 
 
 
 
 
        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);
        }
    }
}
Если кому нужно прикрепил проект целиком. И по возможности, как мне портировать на Siverlight проект? Что нужно учесть? И что не будет/будет работать
Вложения
Тип файла: rar WpfApplication16.rar (510.6 Кб, 39 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2013, 18:59
Ответы с готовыми решениями:

Drag'n'Drop WPF
Имеется Thumb с обработчиком DragDelta следующего вида. private void start_arrow_DragDelta(...

[WPF] Charts Drag and Drop
Здравствуйте форумчане. Задача такого плана. Есть Один Chart допустим от WPFToolkit или D3. есть...

WPF Drag and Drop image
Подскажите пример как можно перемещать картинку на Canvas

Использование Drag&Drop в Wpf для нескольких файлов
Здравствуйте. Создаю свой плеер и хочу реализовать возможность добавления нескольких медиа файлов...

0
15.06.2013, 18:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2013, 18:59
Помогаю со студенческими работами здесь

Drag and drop
У меня есть нарисованная разметка состоящая из клеточек количеством 32 на 16. На ней в случайном...

Drag and Drop
Как создать объект, который можно свободно перемещать по окну программы? Но не текст и не...

Косынка Drag and Drop
как можно реализовать движение карт в пасьянсе косынка, я понимаю, что с помощью Drag And Drop, но...

Drag-n-Drop в окно
Не могу понять как настроить приложение так что бы оно воспринимало файлы перетянутые из вне. У...

Drag and Drop Label Replace
Добрый день как можно реализовать Drag and Drop таким образом что бы на место старого элемента...

Drag`n`Drop файлов в TextBox
Доброго времени суток. Для WinForms всегда использовал следующий код, с небольшими правками ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru