在列表视图中拖动多个文件 [英] Drag multiple files in listview
本文介绍了在列表视图中拖动多个文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图在我的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屋!
查看全文