我尝试创建DataGrid
每个单元格为ComboBox
,每个ComboBox
列出一个颜色列表,默认情况下从数据库中读取所选值。
我的问题是我无法根据颜色列表为ComboBox
中的每个项目的背景着色
<DataGrid.Columns>
<DataGridTemplateColumn x:Name="ComboBoxColumnTemplate">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource = "{Binding ColorsList}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="" Background="{Binding ???}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
我怎样才能做到这一点?
更新&gt;&gt;&gt;
我尝试了Sheridan
,它对我有用,但是当我选择一个项目时,ComboBox的背景并没有取得所选项目的背景。
我需要这个,因为我使用ComboBox进行颜色选择。
谢谢。
答案 0 :(得分:0)
这完全取决于ColorsList
内部究竟是什么......如果它是SolidColorBrush
es的集合,那么您可以简单地执行此操作:
<ComboBox ItemsSource="{Binding Colours}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="Put some text in here" />
</DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox.ItemContainerStyle>
<Style>
<Setter Property="ComboBox.Background" Value="{Binding}" />
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
但是,如果它是Color
类型的集合,那么这将无效,因为TextBlock.Background
的类型为Brush
。
更新&gt;&gt;&gt;
我已更新代码示例以使用ItemContainerStyle
,因为这会为Background
的整个 ComboBoxItem
着色,而不仅仅是{ {1}}。