我有一个列表框,并试图在代码中选择和项目。有时会突出显示一个项目,即背景是蓝色的,但另一个项目周围有一个方形蓝色框(没有突出显示框的空心轮廓)。
我是否正确地说一个是“突出显示”,一个是“选中”,我是否正确识别了它们?
应该发生这种情况......那是这两件事不同步吗?
谢谢科迪
我有一个列表框,并试图在代码中选择和项目。有时会突出显示一个项目,即背景是蓝色的,但另一个项目周围有一个方形蓝色框(没有突出显示框的空心轮廓)。
我是否正确地说一个是“突出显示”,一个是“选中”,我是否正确识别了它们?
应该发生这种情况......那是这两件事不同步吗?
谢谢科迪
刚刚解决了这个问题。尽管列表框滚动查看器也会自动滚动列表框中的选定项,但第一项将具有焦点,并且当您描述键盘交互时,然后使用列表中的第一项而不是选定项进行操作。
对我们来说,修复是
this.MyListBox.UpdateLayout();
this.MyListBox.Focus();
this.MyListBox.SelectedItem = MyObject;
this.MyListBox.ScrollIntoView(this.MyListBox.SelectedItem);
动作的顺序似乎很重要。
这是使用 ListBox 内部滚动查看器。
蓝色突出显示背景的项目是 SelectedItem。带有蓝色矩形的项目是当前认为它具有焦点的项目。
通常,焦点矩形和选定的填充一起找到,因为选定的项目通常会随着鼠标单击而改变,这也会将焦点带到同一元素上。但是,例如,代码可能会在 ListBox 仍具有焦点时更改所选项目。在这种情况下,选定的突出显示将移动新选择的项目,但焦点矩形将保持在原处。(请注意,我描述的是对用户来说是什么,而不是引擎盖下的实际工作方式)。
有关正在发生的事情的见解,请参阅ListBox 样式和模板文档中的 ListBoxItem 样式。