Реализация Drag and Drop аналогично - PullRequest
0 голосов
/ 20 мая 2011

[Положение]

У меня есть собственный userControl (в основном iamge с некоторым текстом под ним). В моей программе я добавляю два из них и реализую метод перетаскивания с помощью

public partial class CustomItem : UserControl
{
    private bool IsDragging { get; set; }
    private Point clickPosition;
    public CustomItem()
    {
        InitializeComponent();
        this.DataContext = this;
        this.MouseLeftButtonDown += (s, ea) =>
        {
            clickPosition = ea.GetPosition(this.LayoutRoot);
            this.CaptureMouse();
            IsDragging = true;
        };
        this.MouseMove += (s, ea) =>
        {
            if (IsDragging)
            {
                this.transFormThisShit.X = ea.GetPosition(this).X - clickPosition.X;
                this.transFormThisShit.Y = ea.GetPosition(this).Y - clickPosition.Y;
            }
        };
        this.MouseLeftButtonUp += (s, ea) =>
        {
            this.ReleaseMouseCapture();
            IsDragging = false;
        };
    }
}

[Проблема]

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

Есть ли какой-нибудь возможный способ реализовать это в приведенном выше коде, чтобы, когда я уронил 2 этого элемента управления поверх друг друга, я мог перехватить / некоторое событие, для которого я могу получить оба элемента управления?

Надеюсь, вы понимаете мой вопрос.

[Изменить]

Если это невозможно в текущем контексте, пожалуйста, назовите способ, которым я могу сделать это с помощью пользовательских элементов управления.

Может быть, есть что-то вроде элемента управления перетаскиванием, которое я могу "редактировать" в том же самом элементе, что и этот элемент управления!

1 Ответ

0 голосов
/ 21 мая 2011

В событии MouseLeftButtonUp вы можете использовать проверку координат, на которые перетащен элемент управления, и сравнить их с элементом управления, на который вы хотите перетащить. Я не вижу другого очевидного способа сделать это.

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

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