WinRT c# ListView防止拖放到特定位置
本文关键字:定位 位置 拖放 ListView WinRT | 更新日期: 2023-09-27 18:18:57
我有拖放工作在我的ListView,但我想防止某些拖放和某些基于位置。
我的列表中的第一项(第0行)应该保持固定。我不想让他们拖拽它。我还没有找到一种方法来防止它被明显地拖拽,但至少我可以通过设置item.AllowDrop = false;
来阻止他们在开始拖拽它时放下它。
1)我如何阻止用户拿起第一件物品?如何防止第一行被拖动?
另外,我希望用户能够选择第1-n行,但我不希望他们能够在第0行之前删除它们。我希望第0行保持固定的位置作为第一项。例如,我如何防止用户拿起第3行,然后将其拖到第0行上方并放下它?
是否有可能重定向放置位置,以便如果他们试图将其放置在第0行上方,我可以使其实际放置在第0行下方(进入新的第1行位置)。
在iOS中,我可以使用
-tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
来阻止第一行移动,我可以使用
- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath
将删除的目的位置从索引0更改为索引1。
2)什么是正确的Windows运行时方法来防止基于集合内的某些位置的拖放?
(我希望你从2年前就找到了解决方案或变通方法,但如果这有助于其他偶然发现这篇文章的人…)
我在Windows UWP中遇到了同样的问题。我没有找到一个很好的解决方案,但作为一个变通办法,我拆分了ListView的ItemsSource,以便我想保持固定的第一个项目是分开的。我还发现ListViewItem不一定要由ListView父级。所以我的XAML看起来像这样(伪代码):
<MyFixedListViewItem
Grid.Row="0">
<!-- Bindings -->
</MyFixedListViewItem>
<ListView
Grid.Row="1"
CanReorderItems="True"
CanDragItems="True"
AllowDrop="True">
<!-- DataTemplate and Bindings for everything else here -->
</ListView>