【问题标题】:WinRT C# ListView prevent drag and drop to a particular locationWinRT C# ListView 防止拖放到特定位置
【发布时间】:2014-08-20 20:11:34
【问题描述】:

我的 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 运行时方法是什么?

【问题讨论】:

    标签: c# drag-and-drop windows-runtime


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-17
      • 2018-12-23
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多