MSDN说:
要填充下拉列表,请先为其设置ItemsSource属性 ComboBox使用以下选项之一:
- 静态资源。有关更多信息,请参阅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类型的内联集合”是什么意思呢?
答案 0 :(得分:1)
此处的关键是DataGridComboBoxColumn
不是ComboBox
,引用的文档片段不适用。
我认为,为什么你不能在列定义中添加ComboBoxItem
元素的原因是,它会造成多次将它们添加到可视树中的问题(在填充每个ComboBox
时项目将被重复使用&#34;而不是克隆)。
据我所知,DataGridComboBoxColumn
只是一个列定义,它公开了一些ComboBox
属性,默认显示为ComboBox
。我的观点是,DataGridTemplateColumn
无法实现额外的功能。
这是一个可以让你开始的另一种选择:
<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox>
<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" />
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
与之前的场景相反,这次它起作用,因为ComboBoxItem
元素是在DataTemplate
内定义的,这意味着XAML处理器实际上将它们转换为FrameworkElementFactory
个对象,而这些对象又是能够按需生成模板ComboBoxItem
元素。