DatagridTextColumn中心文本

时间:2015-12-17 14:49:24

标签: c# wpf xaml datagrid

我有一个数据网格。根据它们的值,一些单元格是不同的颜色。这很好用。

问题在于,当我将文本居中时,单元格会失去颜色,字体会被着色,但我也想要填充单元格。

下面是我的代码,它填充单元格并更改字体颜色,唯一缺少的是文本不居中。

<DataGridTextColumn Header="BTBL" IsReadOnly="True" MinWidth="75" Binding="{Binding BTBL.DisplayString}">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="FontWeight" Value="Bold"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding BTBL.ColourCode}" Value="GREEN">
                    <Setter Property="Background" Value="LightGreen"/>
                    <Setter Property="Foreground" Value="DarkGreen"/>                                                                                     
                </DataTrigger>
                <DataTrigger Binding="{Binding BTBL.ColourCode}" Value="YELLOW">
                    <Setter Property="Background" Value="LightYellow"/>
                    <Setter Property="Foreground" Value="DarkKhaki"/>                                        
                </DataTrigger>
                <DataTrigger Binding="{Binding BTBL.ColourCode}" Value="RED">
                    <Setter Property="Background" Value="LightCoral"/>
                    <Setter Property="Foreground" Value="Red"/>                                       
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>

当我添加上面的行时,虽然我说虽然字体是单元格不再是彩色的,为什么?

yourapp://the-rest-of-your/uri

1 个答案:

答案 0 :(得分:1)

编辑:作为@ChrisW。在评论部分提到,TextAlignment=Center是真正的答案,你不需要Textblock的包装器。由于这是目前唯一的答案,我在这里留下编辑而不是完全收回它。以下代码可用于处理您无法选择TextAlignmentHorizontalContentAlignment的其他情况。

实际上代码正是应该正常工作的。当您说HorizontalAlignment=Center时,TextBlock缩小到其内容长度,然后将其自身置于容器中。为了实现您想要的效果,您需要在居中的文本块周围添加一个包装器控件,然后处理完整的单元格宽度填充。

<DataGridTemplateColumn Header="BTBL" IsReadOnly="True" MinWidth="75">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Border BorderThickness="0">
                <TextBlock Text="{Binding BTBL.DisplayString}">
                    <TextBlock.Style>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="HorizontalAlignment" Value="Center" />
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding BTBL.ColourCode}" Value="GREEN">
                                    <Setter Property="Foreground" Value="DarkGreen"/>
                                </DataTrigger>
                                <DataTrigger Binding="{Binding BTBL.ColourCode}" Value="YELLOW">
                                    <Setter Property="Foreground" Value="DarkKhaki"/>
                                </DataTrigger>
                                <DataTrigger Binding="{Binding BTBL.ColourCode}" Value="RED">
                                    <Setter Property="Foreground" Value="Red"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBlock.Style>
                </TextBlock>
                <Border.Style>
                    <Style TargetType="{x:Type Border}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding BTBL.ColourCode}" Value="GREEN">
                                <Setter Property="Background" Value="LightGreen"/>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding BTBL.ColourCode}" Value="YELLOW">
                                <Setter Property="Background" Value="LightYellow"/>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding BTBL.ColourCode}" Value="RED">
                                <Setter Property="Background" Value="LightCoral"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Border.Style>
            </Border>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>