根据选择和值更改WPF DataGrid单元格的背景颜色

时间:2012-02-18 00:42:06

标签: c# wpf wpfdatagrid

我正在尝试实现此目的:当用户在DataGrid中选择一个或多个单元格时,所有重复项的背景颜色都应更改

我有这个xaml

<Window x:Class="NotesOnFretboard.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="true"  Margin="12,110,12,29" Name="dataGrid1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" IsReadOnly="True" />
    </Grid>
</Window>
代码背后的代码:

public MainWindow()
{
    InitializeComponent();
    DataTable dt = CreateDataTable();

    dataGrid1.ItemsSource = dt.DefaultView;
}

所以我使用DataTable(10行,25列)填充数据网格。 在这个数据表中有许多重复的值。

当用户在DataGrid中选择一个或多个单元格时,所有重复项的背景颜色都应该更改!

请帮助!

// Anders

2 个答案:

答案 0 :(得分:1)

你应该使用触发器来实现这一目标 查看此综合指南:Styling Microsoft’s WPF datagrid

答案 1 :(得分:1)

您可以更改集合类,使其具有指示是否应突出显示的属性,然后将该属性(通过转换器)绑定到要更改颜色的元素属性。 你可以响应选择/点击,并根据你想要的标准将你的ItemSource'selected'属性更改为true / false。

类似于:

<sdk:DataGrid x:Name="NoteList"
    AutoGenerateColumns="False"
    GridLinesVisibility="None"
    HeadersVisibility="None"
    IsReadOnly="True"
    ItemsSource="{Binding NoteList,Mode=OneWay}">
    <sdk:DataGrid.Columns>
        <sdk:DataGridTemplateColumn Width="Auto">
            <sdk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding NoteDescription, Mode=OneWay}"
                             Background="{Binding NoteHighlighted, 
                                Converter={StaticResource BooleanToColourConverter}}"/>
                </DataTemplate>
            </sdk:DataGridTemplateColumn.CellTemplate>
        </sdk:DataGridTemplateColumn>
    </sdk:DataGrid.Columns>
</sdk:DataGrid>