设置项目焦点在WPF的ListView(Set Item Focus in ListView WPF

2019-06-17 13:51发布

有没有什么办法来完成从WinForms的WPF中这个功能?

ListView.FocusedItem = ListView.Items[itemToFocusIndex]

我想手动设置对焦 (不选择)在WPF ListView项。 从System.Windows.Controls。 谢谢。

Answer 1:

有两种类型的焦点在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



Answer 2:

我相信你可以使用Keyboard.FocusedElement获得在ListView聚焦元素。

Keyboard.FocusedElement

应该返回聚焦元素



Answer 3:

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


Answer 4:

ListView的项目是UI元素,所以只需使用UIElement.Focus() 例如, listViewItem.Focus()button.Focus()等。



Answer 5:

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


文章来源: Set Item Focus in ListView WPF