2011-10-19 60 views
3

我有一個包含在ListBoxDragDropTarget中的Silverlight ListBox。我正在收聽DDT的Drop事件,但我不知道如何找到放置操作的索引。即我想知道用戶在哪個索引點將項目放入我的ListBox中。在用戶界面上拖動ListBox時,我可以看到一條線指示我正在徘徊的位置,但在放下之後,我不知道如何從放置事件中獲取放置位置信息。如何找到丟棄項目的索引位置到Silverlight ListBoxDragDropTarget

回答

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); 
    } 
} 
相關問題