从 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的主要内容,如果未能解决你的问题,请参考以下文章

从其他窗口获取 ListView 项目文本

从 firebase 检索数据后获取空白 ListView

从 Activity 返回时如何获取最后一个 ListView 状态

使用复选框从 ListView 中获取选中的项目

无法从 Listview 的 EditText 中获取值?

Android Sqlite:如何从 Listview 中获取 SQLite rowId?