在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++; } }