Заранее спасибо.

Я хочу функцию , тогда я ее получил, вот так:

enter image description here

Но, как и на этой картинке, в GridView есть элемент и папка (например, избранное), мне нужно перетащить элементы в папку, например:

enter image description here

Но у меня есть два метода:

В GridView:

AllowDrop="True"
DragOver="girdView_DragOver"
Drop="girdView_Drop"

В Folder (это StackPanel) :

Drop="StackPanel_Drop" AllowDrop="True" DragOver="StackPanel_DragOver"

Но у меня проблема:

** Когда я перетаскиваю элемент, я перетаскиваю в gridview, потенциальная цель перетаскивания - gridview, поэтому вызываю gridview DragOver, но я перетаскиваю папку, хотя папка является потенциальной целью перетаскивания, но поскольку она находится в gridview, все равно вызываю gridview's DragOver **

Как вызвать папку DragOver? например какая-то приоритетная вещь.

А также:

Когда я захожу в папку, вызываются оба метода Drop.

Такие как:

enter image description here

Это вызовет drop gridview и drop папки.

Как решить эту проблему?

Благодарность

0
haihan jin 3 Янв 2018 в 15:32

2 ответа

Лучший ответ

Мне нужно перетащить элементы в gridview или в папку в gridview.

Но я, когда я упаду, инициирую событие обоих.

Я решил это так:

Как Бриз Лю - вдохновение MSFT:

Вы также можете зарегистрировать событие DragOver с тем же именем обработчика событий, а затем различать событие по объекту отправителя обработчика событий, как следующий код

В GridView: установите Drop = "DragOver"

В папке (это StackPanel) : также установите Drop = "DragOver".

И обработчик:

Вы должны объявить переменную для записи

Если вы опускаете панель стека, поскольку StackPanel находится в GridView, поэтому отправителем является StackPanel и GridView, они оба решат, является ли (это werid)

Если падение в стековую панель,

Поэтому вы должны сделать это:

int flag = 0;
private void DragOver(object sender, DragEventArgs e)
{
    if (sender is StackPanel)
    {
        flag = 1;
        //TODO StackPanel DragOver
        Debug.WriteLine(sender.GetType().ToString());
    }else if(sender is GridView && flag == 0)
    {
        //TODO GridView DragOver
        Debug.WriteLine(sender.GetType().ToString());
    }
    flag = 0;
}

Надежда помогает.

0
haihan jin 14 Янв 2018 в 09:21

В виде документа,

Происходит, когда система ввода сообщает о базовом событии перетаскивания с этим элементом в качестве потенциальной цели перетаскивания.

Если вам просто нужно событие папки (StackPanel) DragOver, вы можете установить для свойства GridView AllowDrop значение false , тогда GridView Событие DragOver не запускается.

В противном случае, если вам не нужно событие DragOver для GridView, почему бы не удалить регистрацию события GridView. Вы также можете зарегистрировать событие DragOver с тем же именем обработчика событий, а затем различать событие по объекту обработчика событий sender как следующий код, так как событие Drop.

private void DragOver(object sender, DragEventArgs e)
{
    if (sender is StackPanel)
    {
        //TODO StackPanel DragOver
        Debug.WriteLine(sender.GetType().ToString());
    }else if(sender is GridView)
    {
        //TODO GridView DragOver
        Debug.WriteLine(sender.GetType().ToString());
    }
}
0
Breeze Liu - MSFT 10 Янв 2018 в 09:26