C# WPF DataGrid自定义RowStyle和CellStyle
我正在尝试设置DataGrid,基于我的DataContext绑定,使用以下设计约束: (网格本身有4列:3列DataGridTextColumns和一列DataGridTemplateColumn,使用MahApps Metro切换开关作为控件)C# WPF DataGrid自定义RowStyle和CellStyle,c#,wpf,datagrid,C#,Wpf,Datagrid,我正在尝试设置DataGrid,基于我的DataContext绑定,使用以下设计约束: (网格本身有4列:3列DataGridTextColumns和一列DataGridTemplateColumn,使用MahApps Metro切换开关作为控件) 默认值:文本列与文本中心对齐,字体大小为15 如果Ismask为true,则整行的前景应为浅灰色,并且每个文本列的字体样式应为倾斜。所有其他案例都断言Ismask是错误的。(这是为了在确保切换开关仍处于启用状态的同时,有效地为行提供禁用的外观。)
- 默认值:文本列与文本中心对齐,字体大小为15
- 如果Ismask为true,则整行的前景应为浅灰色,并且每个文本列的字体样式应为倾斜。所有其他案例都断言Ismask是错误的。(这是为了在确保切换开关仍处于启用状态的同时,有效地为行提供禁用的外观。)
- 如果IsFull为true,则行的背景应为红色
- 如果Is98PercentFull为真,则背景应为橙色
- 如果Is95PercentFull为真,则背景应为金色
<Style x:Key="CellTextBlockStyle" TargetType="{x:Type TextBlock}">
<Setter Property="TextAlignment" Value="Center" />
<Setter Property="FontSize" Value="15" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsMasked, UpdateSourceTrigger=PropertyChanged}" Value="True">
<Setter Property="FontStyle" Value="Oblique" />
<Setter Property="Foreground" Value="LightGray" />
</DataTrigger>
</Style.Triggers>
</Style>
<Style x:Key="RowStyle"
BasedOn="{StaticResource MetroDataGridRow}"
TargetType="{x:Type DataGridRow}">
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Is95PercentFull, UpdateSourceTrigger=PropertyChanged}" Value="True" />
<Condition Binding="{Binding IsMasked, UpdateSourceTrigger=PropertyChanged}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Gold" />
<Setter Property="Foreground" Value="Black" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Is98PercentFull, UpdateSourceTrigger=PropertyChanged}" Value="True" />
<Condition Binding="{Binding IsMasked, UpdateSourceTrigger=PropertyChanged}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Orange" />
<Setter Property="Foreground" Value="Black" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsFull, UpdateSourceTrigger=PropertyChanged}" Value="True" />
<Condition Binding="{Binding IsMasked, UpdateSourceTrigger=PropertyChanged}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Red" />
<Setter Property="Foreground" Value="Black" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
编辑:出于某种原因,如果启用了RowVirtualization,DataGrid会变得更加混乱,只有在向上滚动时才能正确应用样式
编辑2:有人吗?如果您不只使用RowStyle会发生什么?不会发生任何样式设置。如果您不只使用RowStyle会发生什么?不会发生任何样式设置。