我有一个 ComboBox,它作为 ObservableCollection 作为其项目源。因此,组合框由标签组成。
我有许多可以由用户生成的用户控件,每个用户控件都可以有许多组合框。创建 UserControl 时,将带有 UserControl 名称的标签添加到 ObservableCollection,因此项目源为 ObservableCollection 的每个 ComboBox 现在也将添加最新的标签。
一切正常,ComboBoxes 在新的 UserControls 产生时填充,正如预期的那样。然而,一个非常奇怪的问题正在发生。
当用户打开一个 UserControl 的 ComboBox 下拉菜单时,他可以正常看到所有的标签。
然后,当用户打开另一个 UserControl 的 ComboBox 下拉菜单时,所有项目都以相同的方式显示。现在奇怪的问题是,当用户回到前一个 UserControl 的 ComboBox 时,项目消失了。标签仍然存在,因为我已经对其进行了调试,发现标签仍然作为项目包含,但是好像它们的高度已设置为 0(在调试时发现它们的高度不是 0,而是 26 in事实)。
包含相同数量的标签,如上面的屏幕截图所示,它们是可选择的,但不可见(只能看到那个蓝色的小条,表明它正在选择某些东西)。我不会在任何地方更改标签的高度。
一位用户评论说 WPF 通过它所代表的集合来缓存 CollectionView,因此所有 ComboBoxes 共享相同的 CollectionView 实例。因此,标签只能有一个可视父级,因此当用户展开第二个 ComboBox 时,它会将标签与第一个分离。