这是对此处提到的代码的部分响应,该代码部分地对我有用,但并没有达到期望,不幸的是,在WPF中,我无法解决此问题并找到解决方案。因为我找不到功能解决方案,所以我问这个问题。
Get selected row item in DataGrid WPF
试图达到结果
回复
回答了2011年4月19日22:01 通过 巴哈(Bahaa Salaheldin)
最有用
但是发生的是,当我向下滚动时,所选行反复出现,我认为是因为“ ContainerFromItem”方法。 是否可以通过编程方式更改DataGrid的背景? -仅在C#代码中? 我试过的是,我对... selected index有点玩,所以它不像WindowsForms那样容易。所以我试图找出如何执行“突出显示”。 我正在使用的是: 绑定了DataGrid项目的DataObject中的DataTable是dataObject.DataTable 我知道我必须在DataGridRow上执行.Background = Brushes。“ DesiredColor”,但是我不确定DataGrid Selected Index / SelectedItem / SelectedItems和Background属性之间是否存在任何关系 谢谢。
19/06/19添加了更多信息:
我在这里发布示例代码,但是此代码可用于Windows窗体, 我以为我可以做这样的事情。
foreach (DataGridViewRow row in dgvNetlist.Rows)
{
if (row.Cells[2].Value.ToString().Contains(Messages.SingleConnection))
row.DefaultCellStyle.BackColor = databaseColor[0]; //error color
else if (row.Cells[2].Value.ToString().Contains(Messages.MissingTP))
row.DefaultCellStyle.BackColor = databaseColor[1];
else if (row.Cells[2].Value.ToString().Contains(Messages.MissingConnection))//if message cell contains missing connections
row.DefaultCellStyle.BackColor = databaseColor[2];
else if (row.Cells[2].Value.ToString().Contains(Messages.MultipleTPs) && cbHideMultipleTPs.Checked == false) //if message cell contains multiple TPs
row.DefaultCellStyle.BackColor = databaseColor[3];
else if (row.Cells[2].Value.ToString().Contains(Messages.EmptyNet)) //if message cell contains Empty net
row.DefaultCellStyle.BackColor = databaseColor[0];
else
row.DefaultCellStyle.BackColor = databaseColor[4]; //OK color
if (row.Cells[4].Value.ToString().Equals("True")) //if row is marked -> marked color
row.DefaultCellStyle.BackColor = databaseColor[5];
i++;
}
但是使用自己的规则,例如,用户必须“保存”某行,他想突出显示该行。 我要做的是分步进行:
1)从选定的ROW中获取项目ID ...项目ID我的意思是表中的原始ID,例如ID号950
2)做一些突出的动作,例如。不同颜色的背景。
3)将ID保存到用户设置,因为每个用户可以在不同的行中突出显示
4)在另一个应用程序启动时,使用一些周期来查找已保存的行(数据库中是否有更多或更少的项目都无关紧要)并突出显示行-顺序如何无关紧要-突出显示取决于项目ID。 ..
我认为可以从datagrid->选定项目中获取ID
但是我找不到像上面发布的代码那样的方法。
希望这将使其更加清晰
答案 0 :(得分:1)
由于您没有发布任何代码,因此很难说出您到底想要什么。要更改背景颜色,请使用绑定到IsSelected的DataTrigger;如果为true,则将背景颜色设置为所需的突出显示颜色
<Style TargetType="{x:Type ContentControl}">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
更新:如果要以编程方式进行操作,则可以在代码中创建绑定,其中Listboxitem是包含该项的列表框,SelectedToBackgroundConverter是实现您在您的文章中提到的规则的转换器帖子。
gridLine.SetBinding(BackgroundProperty, new Binding(nameof(IsSelected)) { Source = ListBoxItem, Converter = new SelectedToBackgroundConverter() });
尽管在代码中执行此操作比使用xaml要复杂得多。