C# WPF ListView键盘导航问题

C# WPF ListView键盘导航问题,c#,wpf,listview,keyboard,navigation,C#,Wpf,Listview,Keyboard,Navigation,我有一个这样的列表视图 列表视图: --------- 芒果 橙色的 葡萄 葡萄 葡萄 苹果 草莓的 每当我使用向下箭头导航时,BlueHighlight在第一个葡萄上暂停,一个点矩形从第二个葡萄开始,在第三个葡萄上暂停,然后BlueHighlight从苹果上恢复。这看起来很奇怪,当导航向上时会变得更奇怪。它从苹果跳到橘子或芒果 这是因为虚拟化吗? 似乎只有重复数据(grapes)才是问题的根源。有什么帮助吗?您在ObservableCollection3次使用相同的“Grapes”对象,

我有一个这样的列表视图

列表视图:
---------

  • 芒果
  • 橙色的
  • 葡萄
  • 葡萄
  • 葡萄
  • 苹果
  • 草莓的

每当我使用向下箭头导航时,BlueHighlight在第一个葡萄上暂停,一个点矩形从第二个葡萄开始,在第三个葡萄上暂停,然后BlueHighlight从苹果上恢复。这看起来很奇怪,当导航向上时会变得更奇怪。它从苹果跳到橘子或芒果

这是因为虚拟化吗?

似乎只有重复数据(grapes)才是问题的根源。有什么帮助吗?

您在
ObservableCollection
3次使用相同的“Grapes”对象,我指的是具有相同引用的对象。而Listbox就是这样。每个元素都应该是一个uncial实例。

将蓝色突出显示视为选定的数据项。Grapes是重复的,因此数据选择不会更改

虚线矩形是键盘焦点,它只关心表示数据项的
ListViewItem


因此,有一个Grapes对象由3个
ListViewItem
对象表示。

虚线矩形是键盘焦点。蓝色矩形是您的选择

当你向下移动键盘时,聚焦你所在的轨迹。但是,选择将跟踪所选项目。当同一项目多次出现在列表中时,选择矩形只能显示在其中一个项目上

要使这项工作符合您的预期,请将您的项目包装在您的ObservableCollection中。因此,不是:

coll.Add(fruit);
你会写信吗

coll.Add(new FruitWrapper(fruit));

在您的
列表框中
您的
项目模板
可以包含一个
内容展示器
,它可以展示包装内的水果(例如
)。

感谢您的回复。我今天就试试。嘿,雷,行了。除了找出问题外,还感谢您提供解决方案。在我的申请表中的“特别感谢”区域中包括您的姓名:)。等待它在网上发布。