0

我对此 WPF-xaml 代码有疑问。没有使用 xaml 很多,但设法用这段代码得到了我想要的东西。但我觉得这根本不是一个好习惯。首先,我想根据某个单元格中的某些值将行从红色更改为绿色或灰色。我真的必须为每个单元格保留一个触发器,还是无论如何都要在整行上执行相同的触发器?我还想在选择行时设置特定颜色,但样式似乎不支持“IsSelected”...

<DataGrid AutoGenerateColumns="False" IsReadOnly="True" HorizontalAlignment="Stretch" Margin="200,50,5,5" ItemsSource="{Binding}" Name="dataGrid1" VerticalAlignment="Stretch" EnableRowVirtualization="True" SelectionChanged="dataGrid1_SelectionChanged" MouseDoubleClick="dataGrid1_MouseDoubleClick">
        <DataGrid.Columns>
            <DataGridTextColumn Width="1*" Header="File name" Binding="{Binding Path=Filename}">
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="Background" Value="#68FF0000" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Errorcode}" Value="0">
                                <Setter Property="Background" Value="LightGreen"/>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Filename}" Value="File not created">
                                <Setter Property="Background" Value="LightGray" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
            <DataGridTextColumn Width="1*" Header="Weight" Binding="{Binding Path=Info1}">
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="Background" Value="#68FF0000" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Errorcode}" Value="0">
                                <Setter Property="Background" Value="LightGreen" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Filename}" Value="File not created">
                                <Setter Property="Background" Value="LightGray" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
            <DataGridTextColumn Width="1*" Header="Rfid" Binding="{Binding Path=Info1}">
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="Background" Value="#68FF0000" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Errorcode}" Value="0">
                                <Setter Property="Background" Value="LightGreen" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Filename}" Value="File not created">
                                <Setter Property="Background" Value="LightGray" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
            <DataGridTextColumn Width="1*" Header="Date/Time" Binding="{Binding Datetime, StringFormat=\{0:yyyy.MM.dd HH:mm:ss\}}">
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="Background" Value="#68FF0000" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Errorcode}" Value="0">
                                <Setter Property="Background" Value="LightGreen" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Filename}" Value="File not created">
                                <Setter Property="Background" Value="LightGray" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
            <DataGridTextColumn Width="1*" Header="Error code" Binding="{Binding Path=Errorcode}">
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="Background" Value="#68FF0000" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Errorcode}" Value="0">
                                <Setter Property="Background" Value="LightGreen" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Filename}" Value="File not created">
                                <Setter Property="Background" Value="LightGray" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
4

1 回答 1

2

我不是很有经验DataGrid,所以这可能不是最好的选择,但我认为你可以通过设置 Row 而不是单独的 Columns 来实现你所追求的:

    <DataGrid <!-- Your settings here -->>
        <!-- Your column definitions here -->
        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=Errorcode}"  Value="0">
                        <Setter Property="Background" Value="LightGreen" />
                        <!-- Other Setters -->
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Path=Filename}" Value="File not created">
                        <Setter Property="Background" Value="LightGray" />
                    </DataTrigger>

                    <!-- Other Triggers -->
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="Red" />
                        <!-- Other Setters -->
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
    </DataGrid>

祝你好运。

于 2013-06-24T11:03:37.533 回答