2010-12-08 5 views
3

목록 상자에서 항목을 선택하는 방법, 항목 하나에서 끌기가 끝나면 드래그를 시작 하시겠습니까?ListBox 항목을 끌어서 선택 하시겠습니까?

+0

뒤에 어떤 당신이 이런 식으로 작업을 수행 할 수 있습니다 뒤에 코드 (라이브러리와 같은 일을하고)

<ListBox SelectionMode="Extended" ...> <ListBox.ItemContainerStyle> <Style TargetType="{x:Type ListBoxItem}"> <EventSetter Event="PreviewMouseUp" Handler="ListBoxItem_PreviewMouseUp"/> <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListBoxItem_PreviewMouseLeftButtonDown"/> <EventSetter Event="PreviewMouseMove" Handler="ListBoxItem_PreviewMouseMove"/> </Style> </ListBox.ItemContainerStyle> </ListBox> 

그리고 코드를 사용하는 경우 ' 기본적으로 당신을 위해 일하지 않습니까? –

+1

Windows 탐색기에서'Box Selection'과 같은 뜻입니까? – decyclone

+0

요소 5에서 10으로 끌면이 항목들을 선택으로 표시하고 싶습니까? –

답변

5

msdn에 대한 질문에서이 방법을 찾았지만 연결할 수 없으므로 다시 찾을 수 없습니다. 어쨌든이 방법은 드래그 앤 스크롤을 동시에 할 때만 좋은 방법입니다. 그것은 몇 가지 항목을 놓칠 수 있습니다. 나는 당신이 here에서 다운로드 할 수 있습니다 MultiSelectLibrary에 대한 참조를 추가이

처럼 사용할 수 있습니다 MultiSelectLibrary라는 사용자 지정 컨트롤 라이브러리 (출처 here)
네임 스페이스와의 selectionMode = "확장"과 함께 MultiSelectListBox 추가를 만들었습니다 작동해야합니다.

xmlns:mslb="clr-namespace:MultiSelectLibrary.MultiSelectListBox;assembly=MultiSelectLibrary" 

<mslb:MultiSelectListBox SelectionMode="Extended" .../> 

당신이 아니라 바로이 아무튼

private object _anchor, _lead; 
private Boolean _inMouseSelectionMode; 
private List<object> _selectedItems = new List<object>(); 

private void ListBoxItem_PreviewMouseUp(object sender, MouseButtonEventArgs e) 
{ 
    _selectedItems.Clear(); 
    _inMouseSelectionMode = false; 
    _anchor = null; 
    _lead = null; 
} 

private void ListBoxItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) 
     return; 

    _anchor = sender; 
    _inMouseSelectionMode = true; 
    _selectedItems.Clear(); 
    _selectedItems.Add(sender); 
} 
private void ListBoxItem_PreviewMouseMove(object sender, MouseEventArgs e) 
{ 
    if (!_inMouseSelectionMode) 
     return; 

    if (_lead != sender) 
    { 
     var last = _lead; 
     _lead = sender; 

     if (_selectedItems.Contains(_lead)) 
      _selectedItems.Remove(last); 
     else 
      _selectedItems.Add(_lead); 
    } 

    foreach (var item in _selectedItems) 
     ((ListBoxItem)item).IsSelected = true; 
} 
+0

공유 해주셔서 감사합니다. Meleak이 코드에 똑같이 들어가기를 바랍니다. –

+0

내가 선택한 프레임에 어떻게 프레임을 그릴 수 있습니까? – Shimmy

+0

소스에 대한 링크가 작동하지 않습니다. ( –

관련 문제