WPF DataGrid单元格中的多色文本

时间:2015-05-15 06:31:02

标签: wpf

我知道有几种方法可以更改datagridcell中的文本颜色,但我正在寻找一种在同一单元格中以三种不同颜色显示三种不同数字的方法。一个例子看起来像这样: Grid

我知道我可以在三个不同的单元格中完成它,但在我的" pivot"网格不会是一种选择。

如果它有任何区别;我打算通过代码(C#)在可观察的集合中设置它。

我的答案版本: 出于兴趣(以后代),这是我用来在网格中构建颜色的代码:

string xaml = String.Format(@"<DataTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>
<StackPanel Orientation=""Horizontal"">
    <StackPanel.Background>
        <LinearGradientBrush StartPoint=""0,0"" EndPoint=""1,0"">
            <GradientStop Color=""{{Binding Path={0}_Missing_Color}}"" Offset=""0.0""/>
            <GradientStop Color=""{{Binding Path={0}_Found_Color}}"" Offset=""0.5""/>
            <GradientStop Color=""{{Binding Path={0}_Empty_Color}}"" Offset=""1.0""/>
        </LinearGradientBrush>
    </StackPanel.Background>
    <TextBlock Text=""{{Binding Path={0}_Missing}}"" Foreground=""Black"" TextAlignment=""Right"" Width=""25""/>
    <TextBlock Text=""{{Binding Path={0}_Found}}"" Foreground=""Black"" TextAlignment=""Right"" Width=""25""/>
    <TextBlock Text=""{{Binding Path={0}_Empty}}"" Foreground=""Black"" TextAlignment=""Right"" Width=""25""/>
    </StackPanel>
</DataTemplate>", date);

StringReader stringReader = new StringReader(xaml);
XmlReader xmlReader = XmlReader.Create(stringReader);
DataTemplate tDate = (DataTemplate)System.Windows.Markup.XamlReader.Load(xmlReader);
cDate.CellTemplate = tDate;
targetGrid.Columns.Add(cDate);

我最终改变了背景颜色而不是字体颜色,但这个想法保持不变。感谢@xxMUROxx的指导。

1 个答案:

答案 0 :(得分:3)

您可以使用DataGridTemplateColumn,如下所示

<DataGrid>
    <DataGrid.Columns>
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Path=Number1}" Foreground="Red"/>
                        <TextBlock Text="{Binding Path=Number2}" Foreground="Green" />
                        <TextBlock Text="{Binding Path=Number3}" Foreground="Blue" />
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

使用C#进行操作时,您应该将DataTemplate放入资源并通过代码引用它:

DataGrid dg;
var dgt = new DataGridTemplateColumn();
dgt.CellTemplate = // locate resource here
dg.Columns.Add(dgt);