9

有什么方法可以从 WPF 中的 WinForms 完成此功能?

ListView.FocusedItem = ListView.Items[itemToFocusIndex]

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

4

5 回答 5

24

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

于 2012-07-31T19:37:07.370 回答
0

我相信您可以使用 Keyboard.FocusedElement 来获取列表视图中的焦点元素。

Keyboard.FocusedElement

应该返回焦点元素

于 2012-07-31T16:54:45.657 回答
0

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

于 2016-01-12T09:02:30.760 回答
-1
//to set focus write
CollistView7.Items[TheIndItem].Selected = true; 
CollistView7.Select();
CollistView7.Items[TheIndItem].Focused = true;
//when TheIndItem is the index
于 2013-05-26T11:29:11.440 回答
-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++;
         }
    }
于 2012-07-31T17:55:33.363 回答