2

複数選択できる ListBox があります。そして、その中でドラッグアンドドロップ操作を行っています。Ctrl+A を使用してすべての項目を選択しました。しかし、アイテムをクリックしてドラッグを開始すると、アイテムの選択が解除されました。マウスアップでリストボックスアイテムを選択/選択解除する方法はありますか?

4

1 に答える 1

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

}
于 2012-06-12T02:10:57.923 に答える