我有两个Ints
列表,我需要将它们并排放入两个垂直列中。如果数字不匹配,我需要高亮显示(一个或两个单元格,无关紧要。更改背景或字体颜色,无关紧要)。
我最初是并排显示这些ListBoxes
但当我发现很难以编程方式更改特定单元格的颜色时,我开始查看DataGrid
,但这也证明很难+很多我在网上找到的指南似乎是Windows Forms专注的,而不是WPF。
我认为这将是一项简单的任务,建议的控制是什么,请指导我如何识别这些不同的细胞/索引,并更新它们的外观。
额外信息:两个列表都不会非常长(每个<15)。
我在使用datagrid时试过这个;
dgdResults.Rows[0].Cells[0].Style.BackColor = Color.Red;
答案 0 :(得分:1)
DataGrid / ListBox是ItemsControls,适用于单个集合。我建议使用list1和list2 和属性中的一对项创建其他对象列表,这些项指示不同的项,然后在UI中显示该列表。
var L1 = new List<int> {1, 2, 3, 4, 5};
var L2 = new List<int> {1, 2, 0, 4, 5};
var results = L1.Zip(L2, (i, j) => new {Previous = i, Current = j, IsDifferent = i != j});
ListResults.ItemsSource = results;
<ItemsControl Name="ListResults">
<ItemsControl.ItemTemplate>
<DataTemplate>
<UniformGrid Rows="1">
<UniformGrid.Style>
<Style TargetType="UniformGrid">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsDifferent}" Value="true">
<Setter Property="Background" Value="Crimson"/>
</DataTrigger>
</Style.Triggers>
</Style>
</UniformGrid.Style>
<Label Content="{Binding Path=Previous}"/>
<Label Content="{Binding Path=Current}"/>
</UniformGrid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
替代DataTable / DataGrid
var L1 = new List<int> {1, 2, 3, 4, 5};
var L2 = new List<int> {1, 2, 0, 4, 5};
var dt = new DataTable
{
Columns =
{
{"Previous", typeof (int)},
{"Current", typeof (int)},
{"IsDifferent", typeof (bool)},
}
};
for (int x = 0; x < L1.Count; x++)
dt.Rows.Add(L1[x], L2[x], L1[x] != L2[x]);
DgResults.ItemsSource = dt.DefaultView;
<DataGrid Name="DgResults" AutoGenerateColumns="False" ColumnWidth="*" IsReadOnly="True">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsDifferent}" Value="true">
<Setter Property="Background" Value="Crimson"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Previous}"/>
<DataGridTextColumn Binding="{Binding Path=Current}"/>
</DataGrid.Columns>
</DataGrid>
在DataTrigger中使用属性IsDifferent
来更改背景
答案 1 :(得分:0)
在app.xaml中,创建一个要用于不匹配行的样式。
<Style TargetType="DataGridRow">
<Setter Property="Background" Value="Red"/>
</Style>
如果你然后枚举行并找到一个不匹配的行,你可以像这样设置样式
Style style = Application.Current.FindResource("DataGridRow") as Style;
row.Style = style;
答案 2 :(得分:0)
从这里How to change single cell color of datagrid in wpf?和user1064519的答案我知道了
movies = [{"titel": "The Godfather", "jaar": 1972, "cijfer": 9.2, "regisseur": "Francis Ford Coppola"},
{"titel": "The Shawshank Redemption", "jaar": 1994, "cijfer": 9.3, "regisseur": "Frank Darabont"},
{"titel": "Schindler's List", "jaar": 1993, "cijfer": 8.9, "regisseur": "Steven Spielberg"},
{"titel": "Raging Bull", "jaar": 1980, "cijfer": 8.2, "regisseur": "Martin Scorsese"},
{"titel": "Casablanca", "jaar": 1942, "cijfer": 8.5, "regisseur": "Michael Curtiz"}]'''
那对我有用!显然更改其他行/列的索引