MSDN说:
若要填充下拉列表,请首先使用下列选项之一设置ComboBox的ItemsSource属性:
- 静态资源。有关详细信息,请参阅StaticResource标记扩展。
- x:静态代码实体。有关更多信息,请参见x:静态标记扩展。
- ComboBoxItem类型的内联集合。
对于“ComboBoxItem类型的内联集合”,我想到了类似这样的东西:
<DataGrid>
<DataGrid.Columns>
<DataGridComboBoxColumn>
<ComboBoxItem Content="None" Tag="0" />
<ComboBoxItem Content="Few" Tag="1" />
<ComboBoxItem Content="Some" Tag="2" />
<ComboBoxItem Content="Enough" Tag="3" />
<ComboBoxItem Content="Lots" Tag="4" />
<ComboBoxItem Content="Too much" Tag="5" />
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
我知道有另外一种方法可以填充DataGridComboBoxColumn,但是我对此很好奇,因为我在我的研究中没有发现任何关于它的东西......那么“ComboBoxItem类型的内联集合”是什么意思呢?
2条答案
按热度按时间nwlls2ji1#
这里的关键是
DataGridComboBoxColumn
不是ComboBox
,引用的文档片段不适用。我认为,不能在列定义中添加
ComboBoxItem
元素的原因是,这会带来将它们多次添加到可视树的问题(在填充每个ComboBox
时,这些项将被“重用”而不是克隆)。据我所知,
DataGridComboBoxColumn
只是一个列定义,它公开了一些ComboBox
属性,默认情况下显示为ComboBox
。我的观点是,它没有DataGridTemplateColumn
无法实现的额外功能。这里有一个替代镜头,应该可以让你开始:
与前面的场景相反,这次它起作用了,因为
ComboBoxItem
元素是在DataTemplate
内部定义的,这意味着XAML处理器实际上将它们转换为FrameworkElementFactory
对象,而FrameworkElementFactory
对象又能够根据需要生成模板化的ComboBoxItem
元素。pbwdgjma2#
只需在
ItemsSource
中使用CompositeCollection
即可。