我有一个包含多个列的DataGrid . 每列包含不同格式的数字 . 现在我需要为每个单元格应用一个样式,这对于大多数列都是完全相同的,但我不知道如何创建共同样式 . 代码的简化版本是这样的:
<DataGrid ItemsSource="{Binding Items}">
<DataGrid.Columns>
<DataGridTextColumn Header="First" Binding="{Binding Value1, StringFormat='{}{0:N2} eq'}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding Value1}" Value="0">
<Setter Property="Foreground" Value="{StaticResource Error}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="First" Binding="{Binding Value2, StringFormat='{}{0:N0} fon'}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding Value2}" Value="0">
<Setter Property="Foreground" Value="{StaticResource Error}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="First" Binding="{Binding Value3, StringFormat='{}0x{0:X4}'}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding Value3}" Value="0">
<Setter Property="Foreground" Value="{StaticResource Error}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
对于不同的情况(几个不同的TextBlock),我已成功使用了对于Text属性我使用StringFormat绑定的方法,并且为了样式目的,我还将相同的值绑定到Tag属性,然后可以在DataTrigger的样式中使用它 . 检查 . 但我不知道如何直接绑定到Cell的Tag属性 .
我想要这样的东西:
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding Tag}" Value="0">
<Setter Property="Foreground" Value="{StaticResource Error}"/>
</DataTrigger>
</Style.Triggers>
</Style>
<DataGrid ItemsSource="{Binding Items}">
<DataGrid.Columns>
<DataGridTextColumn Header="First" CellTag_Binding="{Binding Value1}" Binding="{Binding Value1, StringFormat='{}{0:N2} eq'}"/>
<DataGridTextColumn Header="First" CellTag_Binding="{Binding Value2}" Binding="{Binding Value2, StringFormat='{}{0:N0} fon'}"/>
<DataGridTextColumn Header="First" CellTag_Binding="{Binding Value3}" Binding="{Binding Value3, StringFormat='{}0x{0:X4}'}"/>
</DataGrid.Columns>
</DataGrid>
甚至是这样的:
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding Original_Value}" Value="0">
<Setter Property="Foreground" Value="{StaticResource Error}"/>
</DataTrigger>
</Style.Triggers>
</Style>
<DataGrid ItemsSource="{Binding Items}">
<DataGrid.Columns>
<DataGridTextColumn Header="First" Binding="{Binding Value1, StringFormat='{}{0:N2} eq'}"/>
<DataGridTextColumn Header="First" Binding="{Binding Value2, StringFormat='{}{0:N0} fon'}"/>
<DataGridTextColumn Header="First" Binding="{Binding Value3, StringFormat='{}0x{0:X4}'}"/>
</DataGrid.Columns>
</DataGrid>
可能吗?