WPF:如何在窗体加载时自动滚动到我的第一个ListViewItem

时间:2019-01-02 05:48:17

标签: wpf listview focus

因此,我正在构建简单的Clipboard经理。 每个ListViewItem都来自Clipboard.GetText,我的应用程序最小化为Tray,当双击其Icon时,应用程序跳转,而我想重点放在第一个{{1} },以便能够使用ListViewItem箭头进行导航。

这是我的Up & Down

ListView

型号列表:

ListView myListView;

窗口加载事件:

public ObservableCollection<string> Clipboards

因此,当前当我第一次打开int应用程序时, private void Window_Loaded(object sender, RoutedEventArgs e) { if (viewModel.Clipboards.Count != 0) myListView.ScrollIntoView(myListView.Items[0]); myListView.Focus(); } 不在任何Focus上,而下次焦点位于最后选择的位置/单击ListViewItem并不是第一个。

2 个答案:

答案 0 :(得分:1)

看起来您的代码后面有ViewModel。这不是很好的MVVM标准。

也许这会有所帮助 How can I set the focus to a ListBox properly on load if it uses databinding?

答案 1 :(得分:-1)

从我的角度来看,您并没有关注ListViewItem,而是关注ListView本身。我认为这是您的错误。要集中物品,您必须得到它的容器。 ItemsSource中的对象实际上是数据本身,没有UIElement可以呈现。要绘制此数据或将其添加到可视化树中进行渲染,ItemsControl将为数据生成一个容器,例如ListViewItem。只有UIElement可以接收焦点,这就是UIElement公开Focus()方法的原因。您必须使用ItemContainerGenarator来检索此容器中的数据:

  ListView myListView;
  (myListView.ItemsPanel as VirtualizingPanel)?.BringIndexIntoViewPublic(0);
  myListView.Dispatcher.Invoke(new Action(
    () => 
    {
      ListBoxItem dataContainer = myListView.ItemContainerGenerator.ContainerFromIndex(0) as ListBoxItem;
      dataContainer?.Focus();
    }), DispatcherPriority.ContextIdle);

此示例将焦点移到ListView中的第一个元素。