因此,我正在构建简单的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
并不是第一个。
答案 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中的第一个元素。