2012-06-11 5 views
2

У меня есть ListBox с несколькими выделениями. И я выполняю операцию перетаскивания. Я использовал Ctrl + A, чтобы выбрать все элементы. Но как только я щелкнул элемент, чтобы начать перетаскивание, элементы были отменены. Есть ли способ выбрать/отменить выбор listboxitem с помощью мыши.Выберите ListBoxItem в MouseUp WPF

ответ

4

ListBoxItem переопределяет OnMouseLeftButtonDown и вызывает метод для содержащего ListBox, который обрабатывает выбор. Поэтому, если вы хотите навести указатель мыши на выбранный элемент списка и инициировать перетаскивание, вам нужно будет запустить это, прежде чем это произойдет в ListBoxItem. Поэтому вы можете попробовать обработать PreviewMouseLeftButtonDown на ListBox и проверить e.OriginalSource. Если это ListBoxItem или элемент в элементе списка (вам нужно подойти к визуальному дереву), вы можете начать операцию перетаскивания. Например.

private void OnPreviewLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    var source = e.OriginalSource as DependencyObject; 

    while (source is ContentElement) 
     source = LogicalTreeHelper.GetParent(source); 

    while (source != null && !(source is ListBoxItem)) 
     source = VisualTreeHelper.GetParent(source); 

    var lbi = source as ListBoxItem; 

    if (lbi != null && lbi.IsSelected) 
    { 
     var lb = ItemsControl.ItemsControlFromItemContainer(lbi); 
     e.Handled = true; 
     DragDrop.DoDragDrop(....); 
    } 

} 
Смежные вопросы