在MouseUp WPF上选择ListBoxItem

时间:2012-06-11 21:54:10

标签: wpf listbox mouse

我有一个包含多个选择的ListBox。我正在进行拖放操作。我使用Ctrl + A来选择所有项目。但是,一旦我点击一个项目开始拖动,项目就会被取消选中。有没有办法在鼠标上选择/取消选择listboxitem。

1 个答案:

答案 0 :(得分:4)

ListBoxItem会覆盖其 OnMouseLeftButtonDown ,并在包含处理选择的ListBox上调用方法。因此,如果您想要鼠标按下选定的列表框项并启动拖动,则需要在ListBoxItem发生之前启动它。因此,您可以尝试处理ListBox上的 PreviewMouseLeftButtonDown 并检查e.OriginalSource。如果这是ListBoxItem或列表框项目中的元素(您需要沿着可视树向上走),那么您可以启动拖动操作。 E.g。

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(....);
    }

}