彩色TextBlock WPF的ComboBox

时间:2014-06-26 12:46:08

标签: c# wpf datagrid

我尝试创建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进行颜色选择。

谢谢。

1 个答案:

答案 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}}。