WinRT Gridview DragItemsStarting事件:如何查找被拖动的控件?

时间:2012-11-26 06:30:19

标签: c# gridview windows-runtime winrt-xaml

我正在开发一个XAML / C#WinRT应用程序。该应用程序具有带有分组源的Gridview。我正在Gridview上实现手动拖放功能(因为MS,他们非常聪明地决定跳过分组网格视图中的关键功能)。

我面临的一个问题是尝试获取对被拖动控件的引用。在DragItemsStarting事件中,我们有:

private void GVDragItemsStarting(object sender, DragItemsStartingEventArgs e)
{
var item = e.Items.FirstOrDefault();
if (item == null)
    return;

e.Data.Properties.Add("item", item);
}  

然而,这里的发送者只是GridView,而不是被拖动的控件,e.Items [0]指向底层数据模型对象,而不是实际控件。有没有办法在拖放事件发生之前将实际控件拖到拖动事件链中的某个位置?我正在考虑在PointerPressed事件中偷看,但是在拖动时甚至没有开火。

这似乎是一个明智的选择,我认为我错过了一些明显的东西。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

正如您建议使用ContainerFromItem,最好引用在处理程序中触发原始事件的GridView:

private void GVDragItemsStarting(object sender, DragItemsStartingEventArgs e) 
{ 
   GridView g = (GridView)sender;
   var draggedControl = g.ContainerFromItem(e.Items[0]);
   // ...
}

答案 1 :(得分:0)

稍微尝试了一下事件后,我想通了:通过处理ManipulationStarting事件并将e.Container或e.OriginalSource存储在类变量中以便稍后在拖动事件中访问,可以控制拖动控件

答案 2 :(得分:0)

以下是一个更好的解决方案,它不需要跟踪变量:

var draggedControl = itemGridView.ItemContainerGenerator.ContainerFromItem(e.Items[0]);