2012-02-18 139 views
0

我试图做到这一点:当用户在DataGrid中选择一个或多个单元格时,所有重复项目的背景颜色都应该更改为根据选择和值更改WPF 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中的一个或多个单元格时,所有重复项的背景颜色都应该改变!

请帮忙!

//安德斯

+0

你有什么结合?什么是数据结构?这可能更容易反映在数据结构中。 – 2012-02-18 01:05:18

+0

数据结构是一个ObservablCollection >。其中Note是一个类Note {public string Name {get;组; } public int Octave {get;组; } public int Midi {get;组; }}但是由于我没有找到任何方式显示DataGrid中的列表,我使用Name属性创建了一个DataTable。重复将在Midi属性 – Andis59 2012-02-18 07:07:57

回答

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> 
相关问题