提前致谢。
我想要一个功能,然后我得到它,就像这样:
但是就像那张图片一样,在GridView中有项目和文件夹(喜欢收藏),我需要将项目拖到文件夹中,如下所示:
但是,我有两种方法:
在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
方法。
如:
这将调用gridview的drop
和文件夹drop
。
如何解决这个问题?
感谢
答案 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;
}
希望有所帮助。