C# 如何在代码隐藏中为特定DataRow设置样式属性

C# 如何在代码隐藏中为特定DataRow设置样式属性,c#,wpf,datagrid,code-behind,C#,Wpf,Datagrid,Code Behind,我正在将代码隐藏中的行添加到Xaml中定义的数据网格中 DataTable dt = new DataTable(); DataRow dr1 = dt.NewRow(); DataRow dr2 = dt.NewRow(); DataRow dr3 = dt.NewRow(); dr1.Style = (Style)Resources.FindName("CustomStyle"); dataGrid.ItemSource = dt; dr1没有一个叫做Style的属性,所以我该怎么做

我正在将代码隐藏中的行添加到Xaml中定义的数据网格中

DataTable dt = new DataTable();
DataRow dr1 = dt.NewRow();
DataRow dr2 = dt.NewRow();
DataRow dr3 = dt.NewRow();

dr1.Style = (Style)Resources.FindName("CustomStyle"); 

dataGrid.ItemSource = dt;
dr1没有一个叫做Style的属性,所以我该怎么做呢

这应该很简单,但我有一个困难的时候


我知道这在XAML中非常简单,但需要在代码隐藏中完成,因为我无法定义XAML中的行数,因为它们将被动态添加。

您可以使用
DataTrigger
来完成此操作。在下面的示例中,如果
状态
的值为
State1
,它将是红色的,如果它是
State2
,它将是绿色的。您可以将它绑定到datatable的另一个属性、另一个值以及您喜欢的任何颜色

<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>

正如CodingYoshi所回答的那样,可以在Xaml中完成

如果你需要完整的代码隐藏解决方案,那么你可以参考这个

   public MainWindow()
    {
        InitializeComponent();


        DataTable dt = new DataTable();
        dt.Columns.Add("Col", typeof(string));

        DataRow dr1 = dt.NewRow();
        dr1[0] =  "row1" ;
        DataRow dr2 = dt.NewRow();
        dr2[0] = "row2";
        DataRow dr3 = dt.NewRow();
        dr3[0] = "row3";

        dt.Rows.Add(dr1);
        dt.Rows.Add(dr2);
        dt.Rows.Add(dr3);

        dataGrid.ItemsSource = dt.AsDataView();

        dataGrid.ItemContainerGenerator.StatusChanged += ItemContainerGenerator_StatusChanged;
    }

    private void ItemContainerGenerator_StatusChanged(object sender, EventArgs e)
    {
        // This will ensure, items are generated over UI.
        if (dataGrid.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
        {
            int index = 1; // add logic to get index of row to be styled.
            var row = (DataGridRow)dataGrid.ItemContainerGenerator
                                                 .ContainerFromIndex(index);

            // creating style, can be picked from resources aswell.
            Style style = new Style
            {
                TargetType = typeof(Control)
            };

            style.Setters.Add(new Setter(Control.BackgroundProperty, Brushes.Green));
            // Applied logic
            row.Style = style;
        }
    }

这是完美的作品,我希望我能早点发布!我很高兴能帮上忙。请看完!再次感谢。