C# WPF DataGrid自定义RowStyle和CellStyle

C# WPF DataGrid自定义RowStyle和CellStyle,c#,wpf,datagrid,C#,Wpf,Datagrid,我正在尝试设置DataGrid,基于我的DataContext绑定,使用以下设计约束: (网格本身有4列:3列DataGridTextColumns和一列DataGridTemplateColumn,使用MahApps Metro切换开关作为控件) 默认值:文本列与文本中心对齐,字体大小为15 如果Ismask为true,则整行的前景应为浅灰色,并且每个文本列的字体样式应为倾斜。所有其他案例都断言Ismask是错误的。(这是为了在确保切换开关仍处于启用状态的同时,有效地为行提供禁用的外观。)

我正在尝试设置DataGrid,基于我的DataContext绑定,使用以下设计约束:

(网格本身有4列:3列DataGridTextColumns和一列DataGridTemplateColumn,使用MahApps Metro切换开关作为控件)

  • 默认值:文本列与文本中心对齐,字体大小为15

  • 如果Ismask为true,则整行的前景应为浅灰色,并且每个文本列的字体样式应为倾斜。所有其他案例都断言Ismask是错误的。(这是为了在确保切换开关仍处于启用状态的同时,有效地为行提供禁用的外观。)

  • 如果IsFull为true,则行的背景应为红色

  • 如果Is98PercentFull为真,则背景应为橙色
  • 如果Is95PercentFull为真,则背景应为金色
我现在遇到的问题是网格的行为与我在设计视图中的预期完全一致,但是在调试过程中,只要ISMASK设置为true,唯一会改变的就是背景颜色变为默认颜色。我没有得到浅灰色前景和倾斜文本。此外,“我的所有文本块”都会丢失其默认样式,因此它们显示为大小~10,并位于文本块的左上角

如何有效地设置DataGridRowStyle,根据该行单元格的内容适当地管理它可以拥有的各种设计

<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会发生什么?不会发生任何样式设置。