C# 使用WPF C更改数据网格颜色时出现的问题#

C# 使用WPF C更改数据网格颜色时出现的问题#,c#,wpf,datagrid,wpfdatagrid,C#,Wpf,Datagrid,Wpfdatagrid,我正在使用datagrid并根据行的条件更改行的颜色,我正在以编程方式执行此操作。 仿效 由于我的datagrid绑定到datatable,我直接从datatable加载信息 private void UpdateCor () { gvDados.UpdateLayout (); for (int i = 0; i <dt.Rows.Count; i ++) { var rowContext = (DataGridRow) gvDados.ItemContain

我正在使用datagrid并根据行的条件更改行的颜色,我正在以编程方式执行此操作。 仿效 由于我的datagrid绑定到datatable,我直接从datatable加载信息

private void UpdateCor () {

gvDados.UpdateLayout ();
for (int i = 0; i <dt.Rows.Count; i ++)
{
      var rowContext = (DataGridRow) 
      gvDados.ItemContainerGenerator.ContainerFromIndex (i);

      if (rowContext! = null)
      {
            if (dt.Rows [i] ["situation"]. ToString (). Equals (1))
                     rowContext.Background = Brushes.Green;
            else
                     rowContext.Background = Brushes.Red;
      }
   }
}
private void UpdateCor(){
gvDados.UpdateLayout();

对于(inti=0;i这是一个类似于的问题。 可以使用datatrigger执行以下操作:

 <DataGrid ItemsSource="{Binding YourItemsSource}">
        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow"> 
                <Style.Triggers>
                    <DataTrigger Binding="{Binding State}" Value="State1">
                        <Setter Property="Background" Value="Red"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding State}" Value="State2">
                        <Setter Property="Background" Value="Green"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
    </DataGrid>

这是一个类似于的问题。 可以使用datatrigger执行以下操作:

 <DataGrid ItemsSource="{Binding YourItemsSource}">
        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow"> 
                <Style.Triggers>
                    <DataTrigger Binding="{Binding State}" Value="State1">
                        <Setter Property="Background" Value="Red"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding State}" Value="State2">
                        <Setter Property="Background" Value="Green"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
    </DataGrid>

通常,XAML过于简单,无法表示更复杂的条件。我更喜欢将哪些值应使用哪些颜色的逻辑放入转换器中。这将导致更简单的XAML和C#中转换器更大的灵活性


格式化WPF Datagrid的各个部分是出了名的困难,Microsoft没有提供必要的信息如何进行。请阅读我的文章以更好地理解如何轻松地进行格式化。

通常,XAML过于简单,无法表达更复杂的条件。我更喜欢将逻辑放在哪些值应使用哪些颜色上这使得C#中的转换器具有更简单的XAML和更大的灵活性


格式化WPF数据网格的各个部分是出了名的困难,而Microsoft没有提供必要的信息来进行格式化。请阅读我的文章以更好地理解如何轻松地进行格式化。

此链接:可能会对您有所帮助。可能只需要将setter设置为背景色。这是因为虚拟化。您正在尝试o是一个非常糟糕的主意,可能无法正常工作。您应该在XAML中使用样式和触发器来完成此操作。有很多关于堆栈溢出的示例。但是使用Google进行搜索;这里的搜索功能不是很好。此链接:可能会帮助您。可能只需要将setter设置为背景色这是因为虚拟化。您正在尝试的是ng to do是一个非常糟糕的主意,可能无法正常工作。您应该在XAML中使用样式和触发器来执行此操作。有许多关于堆栈溢出的示例。但是使用Google进行搜索;这里的搜索功能不是很好。
class ValueToBackgroundConverter: IValueConverter {
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
    if (value is int) {
      int quantity = (int)value;
      if (quantity>=100) return Brushes.White;
      if (quantity>=10) return Brushes.WhiteSmoke;
      if (quantity>=0) return Brushes.LightGray;
      return Brushes.White; //quantity should not be below 0
    }
    //value is not an integer. Do not throw an exception
    // in the converter, but return something that is obviously wrong
    return Brushes.Yellow;
  }

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