在WPF中设置ListView的项焦点

9
有没有办法在WPF中从WinForms实现这个功能?
ListView.FocusedItem = ListView.Items[itemToFocusIndex]

我正在尝试在 WPF ListView 中手动设置 焦点(而不是选择)。来自System.Windows.Controls。 谢谢。
5个回答

27

在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


我理解了你代码的思路,但是_myListView.Items[itemIndex] as IInputElement;_返回_null,所以它不能正常工作。 ListView中的项是我的自定义类的实例,并且在运行时根据实例属性选择适当的样式。该类没有继承或实现任何类或接口,因此我无法将其强制转换为IInputElement... - jnovacho
@jnovacho 任何继承自UIElement的控件都实现了IInputElement接口。从myListView.Items[itemIndex]中获取的是什么类型的对象? - Adi Lester
我只从那个集合中获取对象。 - jnovacho
@jnovacho 在调试器中查看实际保存的类型。 - Adi Lester
因此,在集合中实际存储了我的自定义类的实例。该类仅具有两个属性。第一个属性用于选择适当的样式,使用DataTemplateSelector;第二个属性保存在UI中显示的实际数据。 - jnovacho
非常重要的是检查ListViewItem是否为空,并调用ListView.UpdateLayout()。然后调用...ContainerFromIndex就不会为空。 - The Muffin Man

0

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

Keyboard.FocusedElement

应该返回焦点元素


1
我不需要获取已聚焦的项目,我需要设置聚焦。 - jnovacho

0

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


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

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

没有Focus()方法。我正在使用WPF而不是Forms! - jnovacho
确保其Focusable属性设置为true。 - Zac
我认为有一个Focus()方法。在方法下面的链接中间位置查看:http://msdn.microsoft.com/en-us/library/system.windows.controls.listview.aspx - Zac
焦点在整个ListView上,而不是单个项目。 - jnovacho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接