在ListView WPF中设置项目焦点

有没有办法从WPF中的WinForms完成此function?

ListView.FocusedItem = ListView.Items[itemToFocusIndex] 

我正在尝试在WPF ListView中的项目上手动设置焦点 (而不是选择)。 来自System.Windows.Controls 。 谢谢。

WPF中有两种类型的焦点 – 键盘焦点和逻辑焦点。 此链接可以为您提供有关WPF焦点的更多信息。

你可以这样做:

 ListViewItem item = myListView.ItemContainerGenerator.ContainerFromIndex(index) as ListViewItem; item.Focus(); 

也可以打电话

 Keyboard.Focus(item); 

如果您还想将ListView滚动到项目的位置,请添加以下内容:

 myListView.ScrollIntoView(item); 

重要说明:要使其正常工作,您需要在ListView上设置VirtualizingStackPanel.IsVirtualizing="False" ,这可能会导致执行速度变慢。 这个附加属性需要的原因是当ListView被虚拟化时(默认情况下是这样),不会为屏幕上未显示的项创建ListViewItems ,这将导致ContainerFromIndex()返回null

我相信你可以使用Keyboard.FocusedElement来获取listview中的焦点元素。

 Keyboard.FocusedElement 

应该返回聚焦元素

 //to set focus write CollistView7.Items[TheIndItem].Selected = true; CollistView7.Select(); CollistView7.Items[TheIndItem].Focused = true; //when TheIndItem is the index 

ListView项目是UIElements,因此只需使用UIElement.Focus() 。 例如, listViewItem.Focus()button.Focus()等。

  public void foucusItem( ListView.Item itemToFocusIndex){ int count = 0; foreach(ListView.Item item in YourListView){ if(item == itemsToFocusIndex){ ListView.Items[count].Focus(); return; } count++; } }