MSDN说:
To populate the drop-down list, first set the ItemsSource property for the ComboBox by using one of the following options:
- A static resource. For more information, see StaticResource Markup Extension.
- An x:Static code entity. For more information, see x:Static Markup Extension.
- An inline collection of ComboBoxItem types.
对于“ 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 类型的内联集合”是什么意思?
最佳答案
这里的关键是DataGridComboBoxColumn
不是 ComboBox
并且引用的文档片段不适用。
无法添加的原因ComboBoxItem
我认为,列定义中的元素会导致将它们多次添加到可视化树中的问题(在填充每个 ComboBox
后,这些项目将被“重用”而不是克隆)。
据我所知,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
按需元素。
关于wpf - DataGridComboBoxColumn 中的 "An inline collection of ComboBoxItem",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36948539/