在DataGrid中获取选定的行并更改背景颜色

时间:2011-08-16 11:31:24

标签: c# wpf visual-studio-2010 .net-4.0

每当用户点击一个按钮时,我想获取DataGrid中的选定行并更改其背景颜色? 我可以使用SelectedIndex属性获取所选行的索引,但我不知道如何更改相同的背景。

我在VS2010中使用WPF,C#和.Net 4。

...谢谢

4 个答案:

答案 0 :(得分:3)

最好使用触发器进行此类操作,但请尝试以下

private void button_Click(object sender, RoutedEventArgs e)
{
    DataGridRow dataGridRow = dataGrid.ItemContainerGenerator.ContainerFromIndex(dataGrid.SelectedIndex) as DataGridRow;
    if (dataGridRow != null)
    {
        dataGridRow.Background = Brushes.Green;
    }
}

修改
选定的DataGridCells仍将覆盖该背景,因此您可能必须使用父Tag上的DataGridRow属性来处理该背景,例如

<DataGrid ...>
    <DataGrid.CellStyle>
        <Style TargetType="DataGridCell">
            <Style.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}},
                                               Path=Tag}" Value="ChangedBackground">
                    <Setter Property="Background" Value="Transparent" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.CellStyle>
    <!--...-->
</DataGrid>

private void button_Click(object sender, RoutedEventArgs e)
{
    DataGridRow dataGridRow = dataGrid.ItemContainerGenerator.ContainerFromIndex(dataGrid.SelectedIndex) as DataGridRow;
    if (dataGridRow != null)
    {
        dataGridRow.Background = Brushes.Green;
        dataGridRow.Tag = "ChangedBackground";
    }
}

答案 1 :(得分:2)

试试这个

//get DataGridRow
DataGridRow row = (DataGridRow)dGrid.ItemContainerGenerator.ContainerFromIndex(RowIndex);
row.Background = Brushes.Red;

答案 2 :(得分:0)

DataGridRow具有Background属性。这是你需要的吗?

答案 3 :(得分:0)

你也可以用这个:

<DataGrid ...>
<DataGrid.CellStyle>
    <Style TargetType="DataGridCell">
        <Style.Triggers>
            <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}},
                                           Path=IsSelected}" Value="true">
                <Setter Property="Background" Value="Transparent" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</DataGrid.CellStyle>
<!--...-->