在一些允许用户自定义栏目顺序的应用(如:凤凰新闻,网易云音乐等),我们可以方便地拖拽列表项来完成列表的重新排的序,进而完成对栏目顺序的重排。这个功能很人性化,而实现起来其实很简单(甚至都不用写什么后台代码),只有三步。
首先,我们需要让冰箱的大门敞开,也就是允许我们进行拖拽的相关操作。以列表视图为例,注意下面几个属性。
& lt; StackPanel> & lt; ListView x: Name=傲斜怼? AllowDrop=" True " CanReorderItems=" True " IsSwipeEnabled=" True "比; & lt; ListView.ItemContainerStyle> & lt;风格TargetType=癓istViewItem”比; & lt; Setter属性="背景" Value=" https://www.yisu.com/zixun/Gray "/比; & lt; Setter属性="前景" Value=" https://www.yisu.com/zixun/White "/比; & lt; Setter属性="边缘" Value=" https://www.yisu.com/zixun/4 "/比; & lt;/Style> & lt;/ListView.ItemContainerStyle> & lt;/ListView> & lt;按钮单击=" Button_Click "祝辞显示Items & lt; TextBlock x: Name="三"/比; & lt;/StackPanel>
AllowDrop属性允许元素进行拖动,它继承自UIElement基类,为所有可视元素支持。
CanReorderItems属性继承自ListViewBase基类,允许列表控件的项可以重新排序。
IsSwipeEnabled属性(刷卡有“轻扫”之意)也需要设置为“True”,否则在触摸屏等输入设备下无法进行操作。相关的详尽说明在MSDN文档里有介绍(https://docs.microsoft.com/en-us/uwp/api/Windows.UI.Xaml.Controls.ListViewBase),此部分摘录部分原文:
的评论 IsSwipeEnabled
设置为false禁用一些默认的触摸交互,所以它应该设置为true,当这些交互是必要的。例如:
如果启用了项目选择和设置IsSwipeEnabled为false,用户可以用鼠标单击右键取消项目,但不能取消一个项目通过使用滑动手势与联系。
如果你将CanDragItems设置为true,并且IsSwipeEnabled为false,用户可以用鼠标拖动物品,但不与联系。
如果你将CanReorderItems设置为true,并且IsSwipeEnabled为false,用户可以用鼠标再订购物品,但不与联系。
你通常设置IsSwipeEnabled为false时禁用点击动画视图中的项目不支持使用滑动手势的交互,如取消勾选,拖动和重新排序。禁用动画不需要的时候可以改善应用程序的性能。
(有趣的是最后一段:当列表不允许轻扫手势(撤销选定,拖动,拖拽重排)时,我们可以“显式”地将IsSwipeEnabled属性设置为False来提升应用的性能。)
前台好了后,我们就可以在后台加点东西,把我们的排序逻辑(其实并没有,微软已经写好了)添加进去。这个演示里,我用了一个按钮和一个文本框来观察重排的结果。如下:
公共类密封部分主页:页面 { 公共主页() { this.InitializeComponent (); for (int i=0;我& lt;10;我+ +) { list.Items。添加($”- - - - - -这是项{我}- - - - - -”); } } 私人空间Button_Click(对象发送方,RoutedEventArgs e) { 三种。文本=string.Empty; foreach (var list.Items项) { 三种。文本+=item.ToString () [18] + "; } } }
这样,重新排序后,点击按钮,我们即可观察到结果了。
把大象(?)装进去之后,最后就是我们的收尾工作了。显然,刚才的列表只是一个中间的载体,是我们待排序栏目的简单显示。一般而言,这个列表视图会安置在contentdialog或是弹出里,那么怎么在重排后立即让父页面上的栏目得到相应,进行重排呢?我们用个预定义的委托即可,加在刚才的后台代码里(冰箱能装的东西其实挺多的)。
公共行动行动;
然后在父页面注册方法,比如:,,,,,,,,,,,
btn。单击+=异步(s、e)=比; { var=new对话框Dialogs.Sort (); 对话框。行动+=异步()=比;{等待sortagain ();}; 等待dialog.ShowAsync ();};
以上所述是小编给大家介绍的Java实现拖拽列表项的排序功能,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!