Получить выбранную строку в DataGrid и изменить цвет фона - PullRequest
2 голосов
/ 16 августа 2011

Каждый раз, когда пользователь нажимает кнопку, я хочу получить выбранную строку в DataGrid и изменить ее цвет фона?Я могу получить индекс выбранной строки, используя свойство SelectedIndex, но я не знаю, как изменить его фон.

Я использую WPF, C # и .Net 4 в VS2010.

Спасибо ...

Ответы [ 4 ]

3 голосов
/ 16 августа 2011

Лучше использовать триггеры для такого рода вещей, но попробуйте следующее

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";
    }
}
2 голосов
/ 16 августа 2011

Попробуйте это

//get DataGridRow
DataGridRow row = (DataGridRow)dGrid.ItemContainerGenerator.ContainerFromIndex(RowIndex);
row.Background = Brushes.Red;
0 голосов
/ 15 ноября 2015

Вы также можете использовать это:

<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>
<!--...-->

0 голосов
/ 16 августа 2011

DataGridRow имеет свойство Background.Это то, что вам нужно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...