2017-02-09 1 views
0

Ich füge Zeilen in Code hinter meinem DataGrid in Xaml definiert.So legen Sie die Style-Eigenschaft in Code Behind für bestimmte DataRow fest

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; 

Nun, dr1 hat keine Eigenschaft namens Style, also wie kann ich das tun?

Das sollte ziemlich einfach sein, aber ich habe eine harte Zeit.

Ich weiß, das ist wirklich einfach in XAML zu tun, muss aber in Code hinter getan werden, da ich die Anzahl der Zeilen in XAML nicht definieren kann, da sie dynamisch hinzugefügt werden.

Antwort

0

Sie können dazu DataTrigger verwenden. Wenn im Beispiel unten State den Wert State1 hat, wird es rot und wenn es State2 ist, wird es Green sein. Sie können es an eine andere Eigenschaft Ihrer Datentabelle, einen anderen Wert und die von Ihnen bevorzugte Farbe binden.

<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

Das funktioniert perfekt Ich wünschte, ich hätte früher gepostet! –

+0

Ich bin froh, dass ich helfen konnte. Bitte lesen [this] (http://stackoverflow.com/help/someone-answers) – CodingYoshi

+0

Fertig! Danke noch einmal. –

0

Es kann in Xaml getan werden, wie von CodingYoshi beantwortet.

Wenn Sie eine vollständige Codebehind-Lösung benötigen, können Sie diese beziehen.

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; 
     } 
    } 
Verwandte Themen