【发布时间】:2017-12-06 00:15:23
【问题描述】:
我正在构建一个面向 Windows 8.1 和 Windows 10 的 Windows 应用商店应用程序/通用应用程序,我希望能够在 ListView 之间拖放项目,并能够将项目放置在 ListView 中的特定位置。我遇到的主要问题是我找不到确定项目被删除位置的列表索引的好方法。
我找到了一个示例 (XAML ListView reorder),但一个重要的区别是我的列表中的项目具有可变高度,因此该示例项目用于推断索引的简单计算对我不起作用。
我能够获取 ListView 中项目被删除位置的 x,y 位置,但我无法使用该位置来计算索引。我发现有人提到使用 ListView.GetItemAt(x, y) 或 ListView.HitTest(x, y) 但正如其他人发现的那样,Windows Universal 应用程序中似乎不存在这些方法。我也尝试过使用 VisualTreeHelper.FindElementsInHostCoordinates() 但我没有正确使用它,或者我不了解它的用途,因为我无法让它返回结果。
这是我尝试过的一些示例代码:
private void ListView_OnDrop(object sender, DragEventArgs e)
{
var targetListView = (ListView)sender;
var positionRelativeToTarget = e.GetPosition(targetListView);
var rect = new Rect(positionRelativeToTarget, new Size(10, 15));
var elements = VisualTreeHelper.FindElementsInHostCoordinates(rect, targetListView);
// Trying to get the index in the list where the item was dropped
// 'elements' is always empty
}
作为参考,我使用的是 C#、XAML 和 Visual Studio 2013。
谢谢!
【问题讨论】:
标签: listview windows-store-apps win-universal-app