在列表视图中拖动多个文件 [英] Drag multiple files in listview

查看:87
本文介绍了在列表视图中拖动多个文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在我的ListView中实现拖放,拖动单个文件/文件夹"工作正常,但是当我拖动多个文件时,它会占据单个文件,如果设置SelectionMode="Multiple",则选择样式与Windows标准不一样.

I trying to implement drag and drop in my ListView, Dragging single file/folder is working fine but when I drag multiple files it taking single file, If I set SelectionMode="Multiple"selection style is not like windows standards.

下面的代码对于从ListView

UI:

 <ListView  Width="Auto" Height="280" KeyDown="LeftFolderListing_KeyDown"  IsSynchronizedWithCurrentItem="True" AllowDrop="True"  PreviewMouseLeftButtonDown="LeftList_LeftButtonDown" DragEnter="LeftList_DragEnter" Drop="LeftList_DropEnter" PreviewMouseMove="LeftList_PreviewMouseMove"  SelectionMode="Extended"
                        util:GridViewSort.AutoSort="True" x:Name="LeftFolderListing" ItemContainerStyle="{StaticResource LeftListViewItemStyle}" ItemsSource="{Binding LeftFolderList, ElementName=Viewer, Mode=TwoWay}" MouseRightButtonDown="LeftFolderListing_MouseRightButtonDown" ContextMenuOpening="LeftFolderListing_ContextMenuOpening">
                        <ListView.ContextMenu>
                            <ContextMenu x:Name="LeftListContextMenu" StaysOpen="true" Background="WhiteSmoke">
                                <MenuItem Header="Create New Folder"   Click="LeftNewFolder_Click"/>
                                <MenuItem x:Name="LeftRename" Header="Rename"  Click= "LeftRename_Click" DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}"/>
                                <MenuItem x:Name="LeftDelete" Header="Delete" Click="LeftDelete_Click" DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}"/>
                            </ContextMenu>
                        </ListView.ContextMenu>
                        <ListView.View>
                            <GridView>
                                <GridViewColumn x:Name="LeftName" Width="140"  CellTemplate="{StaticResource NameWithIcon}" Header="Name" util:GridViewSort.PropertyName="DisplayNameSort" HeaderContainerStyle="{StaticResource hcs}"/>
                                <GridViewColumn x:Name="LeftSize" Width="90" DisplayMemberBinding="{Binding Size, Converter={StaticResource SizeFormatter}}" Header="Size" util:GridViewSort.PropertyName="SizeforSort" HeaderContainerStyle="{StaticResource hcs}" />
                                <GridViewColumn x:Name="LeftDate" Width="115"  DisplayMemberBinding="{Binding ModifiedDate}" Header="Date Modified" util:GridViewSort.PropertyName="ModifiedDateSort" HeaderContainerStyle="{StaticResource hcs}"/>
                            </GridView>
                        </ListView.View>
</ListView>

C#:

    private void LeftList_LeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                _startPoint = e.GetPosition(null);
            }

      private void LeftList_DragEnter(object sender, DragEventArgs e)
            {
                e.Effects = DragDropEffects.Move;
            }

     private void LeftList_PreviewMouseMove(object sender, MouseEventArgs e)
            {
                if (e.LeftButton == MouseButtonState.Pressed)
                {
                    Point position = e.GetPosition(null);

                    if (Math.Abs(position.X - _startPoint.X) > SystemParameters.MinimumHorizontalDragDistance ||
                        Math.Abs(position.Y - _startPoint.Y) > SystemParameters.MinimumVerticalDragDistance)
                    {
                        BeginDrag(this.LeftFolderListing,"TEST_DATA", e);
                    }
                }
            }

private void BeginDrag(ListView ObjList, string Data, MouseEventArgs e)
        {          

                ListViewItem objListViewItem = FindAnchestor<ListViewItem>((DependencyObject)e.OriginalSource);

                if (objListViewItem == null)             
                    return;

                DataObject _data = new DataObject("TEST_FORMAT", Data);
                DragDropEffects de = DragDrop.DoDragDrop(ObjList, _data, DragDropEffects.Move);



        }

推荐答案

我有一个DroppedFile方法,将其传递给SaveFile方法,在savefile方法中,您可以使用foreach遍历它们.

I have a DroppedFile method that passes it to a SaveFile method, in the savefile method you could iterate over them all using a foreach.

注意:它只是fileList

public void DroppedFile(object sender, DragEventArgs e)
{      
    SaveFile((string[])e.Data.GetData(DataFormats.FileDrop, false));
}

private void SaveFile(string[] fileList)

这使我可以保存多个文件.

This allows me to save multiple files.

这篇关于在列表视图中拖动多个文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆