如何在编辑完行后更改DataGrid行的背景颜色

3

我有一个DataGrid,用户可以编辑其中的一些列。 现在我想要改变被编辑行的背景颜色。

我使用了RowEditEnding事件。

但是现在当一行被编辑时,不止那一行被着色。

xaml:


```html ```
<DataGrid  x:Name="dgArtikel" ItemsSource="{Binding listViewItems}" AutoGenerateColumns="False" RowEditEnding="dgArtikel_RowEditEnding" CanUserAddRows="False">

代码后台:

private void dgArtikel_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
    listViewItems itm = (listViewItems)dgArtikel.SelectedItem;
    DataGridRow row = dgArtikel.ItemContainerGenerator.ContainerFromItem(itm) as DataGridRow;
    row.Background = Brushes.YellowGreen;
}

谢谢您的提问!这是回答“如何通过行内的类实例查找DataGrid行”的问题。我认为这个评论会对其他人有所帮助。感谢您的代码。 - Aleksandar
1个回答

0

我刚尝试了这样一个场景,确实在该事件上,行的颜色被更改了。但在下一次编辑时,新行的颜色也会更改。因此,现在我们有两行的背景设置为YellowGreen。

一个建议是将行定义为全局变量。

  private DataGridRow row;
  private void dgArtikel_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
  {
   if (row != null)
      row.Background = Brushes.White;

   listViewItems itm = (listViewItems)dgArtikel.SelectedItem;
   row = dgArtikel.ItemContainerGenerator.ContainerFromItem(itm) as DataGridRow;
   row.Background = Brushes.YellowGreen;
  }

这样,过去编辑的行将返回其初始颜色。但我不确定这是否完全符合您的要求。

您可以尝试在模型中添加一个已选标志:

    private bool _IsChecked;

    public bool IsChecked
    {
        get { return _IsChecked; }
        set
        {
            _IsChecked = value;
            PropertyChanged(this, new PropertyChangedEventArgs("IsChecked"));
        }
    }

定义一个转换器:

public class BoolToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        bool val = (bool) value;
        if (val)
            return Brushes.GreenYellow;
        else
        {
            return Brushes.White;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

并为DataGridRow添加样式:

    <Style TargetType="DataGridRow">
         <Setter Property="Background" Value="{Binding IsChecked, Converter={StaticResource BoolToColorConverter}}"></Setter>
    </Style>

在 RowEditEnding 中,您可以将模型中的 IsChecked 设置为 true,但是我不知道您想在何时或何处将其设置回 false。我不知道您的具体情况,但这些信息可能会有所帮助。祝你好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接