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运行时方法来防止基于集合内的某些位置的拖放?

WinRT c# ListView防止拖放到特定位置

(我希望你从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>