我目前正试图(在C#)基于其数值到颜色的DataGrid的细胞。我的DataGrid的列被设置为星期几(星期一至星期五),我目前可以做到这一点,但它非常冗长。这是它目前是如何:在WPF/XAML中使用触发器是否更有效?
<DataGrid Name="mapDisplay" ItemsSource="{Binding}" Margin="27,29,27,10" ColumnWidth="73">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<!-- Check if cell has value of 0 in the 'Monday' column. -->
<Condition Binding="{Binding Path=Monday}" Value="0"/>
<Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="White" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<!-- Check if cell has value of 1 in the 'Monday' column. -->
<Condition Binding="{Binding Path=Monday}" Value="1"/>
<Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="White" />
</MultiDataTrigger>
...
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
正如你可以想像,从0值的一周导致一些极其冗长的XAML代码中的每一天这样做是为了3(我最大)的值。有没有办法减少长度,并使我的代码更有效率或动态?
UPDATE:这是你的意思,@Freeman?
<dg:DataGrid.ItemContainerStyle>
<Style
TargetType="{x:Type dg:DataGridColumn}"
BasedOn="{StaticResource {x:Type dg:DataGridColumn}}">
<Setter
Property="Background"
Value="{Binding ItemColour}" />
</Style>
</dg:DataGrid.ItemContainerStyle>
虽然在我的情况下,我会使用转换器将值转换为颜色?
我会建议您对您的虚拟机的逻辑,只是 – Gopichandar