WPF DataGrid自定义RowStyle和CellStyle

时间:2015-12-23 19:13:22

标签: c# wpf datagrid

我正在尝试设置一个DataGrid,基于我的DataContext绑定具有以下设计约束:

(网格本身是4列:3个DataGridTextColumns和一个使用MahApps Metro Toggle Switch作为控件的DataGridTemplateColumn)

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

  • 如果IsMasked为true,则整行的前景应为浅灰色,每个文本列的FontStyle应为倾斜。所有其他情况都有IsMasked为假的断言。 (这样可以有效地为行提供禁用外观,同时仍然确保仍然启用了切换开关。)

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

  • 如果Is98PercentFull为True,则背景应为橙色。
  • 如果Is95PercentFull为True,则背景应为金色。

我现在遇到的当前麻烦是网格似乎与我在设计视图中的行为完全相同,但在调试期间,每当IsMasked设置为true时,唯一改变的是背景颜色。默认。我没有得到浅灰色的前景和斜文。此外,我的所有TextBlock都会丢失其默认样式,因此它们显示为大小~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:任何人?

0 个答案:

没有答案