2012-06-11 87 views
2

我有一個ListBox有多個選擇。我正在做拖放操作。我用Ctrl + A來選擇所有項目。但是,一旦我點擊一個項目開始拖動,項目就被取消選中。有什麼方法可以在鼠標上選擇/取消選擇listboxitem。在MouseUp上選擇ListBoxItem WPF

回答

4

ListBoxItem覆蓋它的OnMouseLeftButtonDown並在包含處理選擇的ListBox上調用一個方法。所以如果你想在選定的列表框項目上按下鼠標並初始化一個拖動,你需要在ListBoxItem發生這種情況之前啓動它。因此,您可以嘗試處理ListBox上的PreviewMouseLeftButtonDown並檢查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(....); 
    } 

}