有没有什么办法来完成从WinForms的WPF中这个功能?
ListView.FocusedItem = ListView.Items[itemToFocusIndex]
我想手动设置对焦 (不选择)在WPF ListView项。 从System.Windows.Controls。 谢谢。
有没有什么办法来完成从WinForms的WPF中这个功能?
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);
重要提示:对于这个工作,你需要设置VirtualizingStackPanel.IsVirtualizing="False"
在你ListView
,这可能导致其执行速度较慢。 需要该附加属性的原因是,当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的项目是UI元素,所以只需使用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++;
}
}