2017-02-09 80 views
0

我將代碼中的行添加到我在Xaml中定義的DataGrid中。如何在特定DataRow的代碼隱藏中設置樣式屬性

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中的行數,因爲它們會被動態添加。

回答

0

您可以使用DataTrigger來做到這一點。在下面的示例中,如果State的值爲State1,則該值爲紅色,如果是State2,則該值爲Green。您可以將它綁定到數據表的另一個屬性,另一個值以及您喜歡的任何顏色。

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

這工作完美我希望我早點發布! –

+0

我很高興我能幫到你。請閱讀[this](http://stackoverflow.com/help/someone-answers) – CodingYoshi

+0

完成!再次感謝。 –

0

在CodingYoshi的回答中,它可以在Xaml中完成。

如果您需要完整的codebehind解決方案,那麼您可以參考這個。

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; 
     } 
    } 
相關問題