我有一个数据网格。根据它们的值,一些单元格是不同的颜色。这很好用。
问题在于,当我将文本居中时,单元格会失去颜色,字体会被着色,但我也想要填充单元格。
下面是我的代码,它填充单元格并更改字体颜色,唯一缺少的是文本不居中。
<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
答案 0 :(得分:1)
编辑:作为@ChrisW。在评论部分提到,TextAlignment=Center
是真正的答案,你不需要Textblock的包装器。由于这是目前唯一的答案,我在这里留下编辑而不是完全收回它。以下代码可用于处理您无法选择TextAlignment
或HorizontalContentAlignment
的其他情况。
实际上代码正是应该正常工作的。当您说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>