将焦点设置到第一个列表视图项
Set focus to the first listview item
在 WinUI3 中,我需要将焦点设置到 ListView 的第一项,以便用户可以立即使用键盘。我执行以下操作:
listView.Focus(FocusState.Programmatic);
if (listView.Items.Count > 0)
{
listView.SelectedIndex = 0;
}
但只有列表视图获得焦点,而不是项目,我需要先单击项目,然后才能使用键盘上下移动。有什么简单的方法可以将焦点放在列表视图的第一项上吗?
由于某些原因,无法从第一次选择 ListViewItem
因此这里有一些解决此问题的方法:
ListViewItem lvi = listView.ContainerFromIndex(0) as ListViewItem;
if (lvi != null)
{
lvi.IsSelected = true;
lvi.Focus(FocusState.Programmatic);
}
else
{
var dispatcherQueue = DispatcherQueue.GetForCurrentThread();
dispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low,
() => {
lvi = listView.ContainerFromIndex(0) as ListViewItem;
if (lvi != null) {
lvi.IsSelected = true;
lvi.Focus(FocusState.Programmatic);
}
});
}
在 WinUI3 中,我需要将焦点设置到 ListView 的第一项,以便用户可以立即使用键盘。我执行以下操作:
listView.Focus(FocusState.Programmatic);
if (listView.Items.Count > 0)
{
listView.SelectedIndex = 0;
}
但只有列表视图获得焦点,而不是项目,我需要先单击项目,然后才能使用键盘上下移动。有什么简单的方法可以将焦点放在列表视图的第一项上吗?
由于某些原因,无法从第一次选择 ListViewItem
因此这里有一些解决此问题的方法:
ListViewItem lvi = listView.ContainerFromIndex(0) as ListViewItem;
if (lvi != null)
{
lvi.IsSelected = true;
lvi.Focus(FocusState.Programmatic);
}
else
{
var dispatcherQueue = DispatcherQueue.GetForCurrentThread();
dispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low,
() => {
lvi = listView.ContainerFromIndex(0) as ListViewItem;
if (lvi != null) {
lvi.IsSelected = true;
lvi.Focus(FocusState.Programmatic);
}
});
}