在GridView和Item上拖放

时间:2018-01-03 12:32:29

标签: c# gridview uwp

提前致谢。

我想要一个功能,然后我得到它,就像这样:

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

这将调用gridview的drop和文件夹drop

如何解决这个问题?

感谢

2 个答案:

答案 0 :(得分:0)

作为document

  

当输入系统使用此元素作为潜在放置目标报告基础拖动事件时发生。

如果您只想要文件夹(StackPanel)' DragOver事件,则可以设置GridView AllowDrop属性 false ,然后GridView的DragOver事件将不会触发。

另一方面,如果您不需要DragOver的{​​{1}}事件,为什么不删除GridView的事件注册。您还可以使用相同的事件处理程序名称注册GridView事件,然后通过事件处理程序DragOver对象将事件区分为以下代码,以及sender事件。

Drop

答案 1 :(得分:0)

我需要将项目拖动到gridview或gridvew中的文件夹。

但是当我放弃时,会触发两者的事件。

我这样解决了:

作为Breeze Liu - MSFT的灵感:

  

您还可以使用相同的事件处理程序名称注册DragOver事件,然后通过事件处理程序发送方对象将事件区分为以下代码

在GridView中: 设置Drop = "DragOver"

在文件夹中(它是一个StackPanel): 也设置了Drop = "DragOver"

和处理程序:

您应该声明一个var来记录

如果你放入stackpanel,因为StackPanel在GridView中,所以发送者是StackPanel和GridView,它们都会决定是否(它是werid)

如果在stackpanel中删除,

所以你应该这样做:

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;
}

希望有所帮助。