从 ListView 获取 ListViewItem 而不是 Item
Posted
技术标签:
【中文标题】从 ListView 获取 ListViewItem 而不是 Item【英文标题】:Get ListViewItem instead of Item from a ListView 【发布时间】:2019-11-18 14:39:58 【问题描述】:对于从 ListView 到 Canvas 的拖放操作,我希望对象像我捡起它们一样被丢弃。例如:
我拿起一个项目,我的鼠标比 ListViewItem 的左上角低 50 像素,右上 20 像素。然后我希望该项目在我放下它时高 50 像素,左 20 像素,所以我得到的位置与我捡起它时的位置相同。当我点击一个项目并开始拖动时,这是我触发的事件:
void StackPanel_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
int index = GetCurrentIndex(e.GetPosition);
var ListIteminstance = ModuleListView.Items[index] as ListViewItem;
// Now you got the original object and then do what you want.
startPoint = e.GetPosition(ListIteminstance);
ListIteminstance
为 null,因为它无法将项目转换为 ListViewItem。因此,我只从项目中获取坐标“0, 0”,当我放下它时,它是从左上角开始的,而不是我捡起它的相对坐标
GetCurrentIndex()
获取我正在单击的项目的索引。但它不是 ListViewItem,而是我存储在列表中的“MyClass”类型的对象。现在我想知道,我如何才能得到我点击的 ListViewItem,这样ListIteminstance
就不是空的了
【问题讨论】:
【参考方案1】:试试这个:
var dataObject = ModuleListView.Items[index];
var ListIteminstance = ModuleListView.ItemContainerGenerator.ContainerFromItem(dataObject)
as ListViewItem;
【讨论】:
这仍然会将项目放置在相对于我的鼠标的 0、0 处 您询问如何获取对ListViewItem
容器的引用,这就是我的回答。 ListIteminstance
还是null
吗?
对不起,我的错误。我在这个问题上坐了几个小时,忘了使用这些坐标
@DudeWhoWantsToLearn:那你的问题在哪里?您能否根据我的建议获得对ListViewItem
的参考?
@DudeWhoWantsToLearn:一旦您的原始问题得到解决,请记住接受答案:***.com/help/someone-answers以上是关于从 ListView 获取 ListViewItem 而不是 Item的主要内容,如果未能解决你的问题,请参考以下文章