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

C# 根据选择和值更改WPF DataGrid单元格的背景色,c#,wpf,wpfdatagrid,C#,Wpf,Wpfdatagrid,我试图做到这一点:当用户在数据网格中选择一个或多个单元格时,所有副本的背景颜色都应该改变 我有这个xaml <Window x:Class="NotesOnFretboard.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Ti

我试图做到这一点:当用户在数据网格中选择一个或多个单元格时,所有副本的背景颜色都应该改变

我有这个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>
因此,我使用DataTable(10行25列)填充datagrid。 在这个数据表中有许多重复的值

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

请帮忙


//Anders

您应该使用触发器来实现这一点
查看本综合指南:

您可以更改集合类,使其具有一个属性来指示是否应高亮显示,然后将该属性(通过转换器)绑定到要更改颜色的元素属性。 您可以响应选择/单击并将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>


您要绑定到什么?什么是数据结构?这可能更容易反映在数据结构中。数据结构是一个可观察的集合。其中Note是一个类Note{public string Name{get;set;}public int Octave{get;set;}public int Midi{get;set;}}},但是由于我没有找到任何方法来显示DataGrid中的列表,所以我使用Name属性创建了一个DataTable。副本将位于Midi属性中
<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>