2011-01-31 6 views
2

ListBoxDragDropTarget (Silverlight 툴킷의) 내에 래핑 된 Listbox을 사용하고 있습니다. 이 ListBox은 사용자가 수동으로 재정렬 할 수 있습니다. 그러나 마지막 항목은 항상 ListBox의 맨 아래에 있어야하며 전혀 이동할 수 없습니다. 이 마지막 항목 이동을 취소하는 방법을 찾았지만 다른 항목을 드래그 앤 드롭하면 아래의이 마지막 항목이 이동합니다. 그러나 이것은 단지 드래그 조작하기 전에 나에게 인덱스 을 제공목록 상자 끌기 순서 변경 : 삭제 된 항목의 인덱스

object data = e.Data.GetData(e.Data.GetFormats()[0]); 

ItemDragEventArgs dragEventArgs = data as ItemDragEventArgs; 
SelectionCollection selectionCollection = dragEventArgs.Data as SelectionCollection; 
if (selectionCollection != null) 
{ 
    MyClass cw = selectionCollection[0].Item as MyClass; 
    int idx = selectionCollection[0].Index.Value; 
} 

:

나는 목록 상자의 Drop 이벤트에서이 코드를 사용하여 드래그 된 항목의 인덱스를 찾을 수 있습니다.

내 질문은 다음과 같습니다. 새로운 삭제 된 항목의 인덱스를 알 수 있습니까? 이 방법은 인덱스 = 목록의 마지막 위치라면, 나는 그것을 forelast 위치로 옮길 수 있습니다.

미리 감사드립니다.

답변

4

좋아요.이 방법이 있습니다. 나는 ListBoxDragDropTargetItemDragCompleted 이벤트를 바인딩, 다음과 같은 한 : 항목 인 경우

private void dropTarget1_ItemDragCompleted(object sender, ItemDragEventArgs e) 
{ 
    var tmp = (e.DragSource as ListBox).ItemsSource.Cast<MyClass>().ToList(); 

    SelectionCollection selectionCollection = e.Data as SelectionCollection; 
    if (selectionCollection != null) 
    { 
     MyClass cw = selectionCollection[0].Item as MyClass; 

     int idx = tmp.IndexOf(cw); 
     if (idx == tmp.Count - 1) 
     { 
      tmp.Remove(cw); 
      tmp.Insert(tmp.Count - 1, cw); 

      MyListBox.ItemsSource = new ObservableCollection<MyClass>(tmp); 
     } 
} 

}

DragSource를 항목의 새로운 "배치"로 목록 상자를 나타냅니다으로, 나는 그러므로 확인할 수 있습니다 이제 끝 부분에 위치하고이 경우 옮깁니다.

남은 유일한 문제는 아이템이 떨어 뜨린 다음 화면을 움직이면 화면에 깜박임이 생기는 것입니다.

나는 (다른 어떤) 제안에도 여전히 열려 있습니다.

2

이 똑같은 문제가 있습니다. 나는 ListBox에있는 항목의 사각형을 반복하여 볼 수 있다고 생각한다. var point = args.GetPosition (myListBox);이 그들 안에 있습니다. 하지만 더 쉬운 방법을 기대하고 있습니다 ...

편집 :이 문제는 이미 중력 효과를 얻지 못했습니까? 사각형을 사용하여 목록에 드롭합니다.

+0

안녕하세요 셰인. 그게 바로 내가해야 할 일이다. 다른 솔루션을 찾는 것이 더 나을 것입니다. 그러나 아무도 "더 나은"대답을하지 않는다면이 점을 명심하십시오. 고마워 ;-) +1 – Shimrod

+0

브릴리언트. 답변 해주셔서 감사합니다. 그것은 내가 필요로하는 것을 위해 일했습니다! – shane

+0

기꺼이 도와 드릴 수 있습니다 :-) – Shimrod