你没说是WPF,还是Winform还是asp.net 下面是WPF的代码。private int GetCurrentIndex(GetPositionDelegate getPosition) { int index = -1; for (int i = 0; i < clasesListView.Items.Count; ++i) { ListViewItem item = GetListViewItem(i); if (this.IsMouseOverTarget(item, getPosition)) { index = i; break; } } return index; }
private bool IsMouseOverTarget(Visual target, GetPositionDelegate getPosition) { Rect bounds = VisualTreeHelper.GetDescendantBounds(target); Point mousePos = getPosition((IInputElement)target); return bounds.Contains(mousePos); }
delegate Point GetPositionDelegate(IInputElement element);
ListViewItem GetListViewItem(int index) { if (clasesListView.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated) return null;
return clasesListView.ItemContainerGenerator.ContainerFromIndex(index) as ListViewItem; }
下面是WPF的代码。private int GetCurrentIndex(GetPositionDelegate getPosition)
{
int index = -1;
for (int i = 0; i < clasesListView.Items.Count; ++i)
{
ListViewItem item = GetListViewItem(i);
if (this.IsMouseOverTarget(item, getPosition))
{
index = i;
break;
}
}
return index;
}
private bool IsMouseOverTarget(Visual target, GetPositionDelegate getPosition)
{
Rect bounds = VisualTreeHelper.GetDescendantBounds(target);
Point mousePos = getPosition((IInputElement)target);
return bounds.Contains(mousePos);
}
delegate Point GetPositionDelegate(IInputElement element);
ListViewItem GetListViewItem(int index)
{
if (clasesListView.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
return null;
return clasesListView.ItemContainerGenerator.ContainerFromIndex(index) as ListViewItem;
}
http://www.codeproject.com/KB/list/CSharpHitTest.aspx
ListView1.Items.Item[0].Selected