如何在Silverlight ListBoxDragDropTarget中找到已删除项的索引位置

时间:2011-10-19 01:57:29

标签: silverlight

我有一个包含在ListBoxDragDropTarget中的silverlight ListBox。我正在听DDT的Drop事件,但我不知道如何找到drop动作的索引。即我想知道用户将项目放入我的ListBox的哪个索引位置。在UI上,当我拖动ListBox时,我可以看到一条线指示我正在悬停的位置,但是在删除之后,我不知道如何从放置事件中获取放置位置信息。

1 个答案:

答案 0 :(得分:0)

鉴于以下Xaml:

<Grid x:Name="ListBoxDragDropTarget"
      Background="Gold"
      AllowDrop="True"
      Drop="ListBoxDragDropTarget_Drop">
    <ListBox x:Name="MyListBox" Margin="50">
        <ListBoxItem Content="Item 1" />
        <ListBoxItem Content="Item 2" />
        <ListBoxItem Content="Item 3" />
    </ListBox>
</Grid>

如果您想知道用户放置项目的ListBoxItem,您可以使用e.GetPosition获取鼠标的位置,VisualTreeHelper.FindElementsInHostCoordinates进行命中测试:

private void ListBoxDragDropTarget_Drop(object sender, DragEventArgs e)
{
    Point position = e.GetPosition(this.ListBoxDragDropTarget);

    var hits = VisualTreeHelper.FindElementsInHostCoordinates(position, this.ListBoxDragDropTarget);

    ListBoxItem dropElement = hits.FirstOrDefault(i => i is ListBoxItem) as ListBoxItem;

    if (dropElement != null)
    {
        // Do something with the dropElement... or if you want the index use ItemContainerGenerator
        int index = this.MyListBox.ItemContainerGenerator.IndexFromContainer(dropElement);
    }
}