有什么方法可以从 WPF 中的 WinForms 完成此功能?
ListView.FocusedItem = ListView.Items[itemToFocusIndex]
我正在尝试在 WPF ListView 中的项目上手动设置焦点(而不是选择)。从System.Windows.Controls。谢谢。
有什么方法可以从 WPF 中的 WinForms 完成此功能?
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 来获取列表视图中的焦点元素。
Keyboard.FocusedElement
应该返回焦点元素
ListView 项目是 UIElements,所以只需使用UIElement.Focus()
. 例如,listViewItem.Focus()
或button.Focus()
等等。
//to set focus write
CollistView7.Items[TheIndItem].Selected = true;
CollistView7.Select();
CollistView7.Items[TheIndItem].Focused = true;
//when TheIndItem is the index
public void foucusItem( ListView.Item itemToFocusIndex){
int count = 0;
foreach(ListView.Item item in YourListView){
if(item == itemsToFocusIndex){
ListView.Items[count].Focus();
return;
}
count++;
}
}