2017-02-09 3 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はので、どのように私はこれを行うことができますスタイルと呼ばれるプロパティを持っていませんか?

これはかなりシンプルなはずですが、私は苦労しています。

これは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

私は助けることができてうれしいです。 [こちら](http://stackoverflow.com/help/someone-answers) – CodingYoshi

+0

をお読みください!再度、感謝します。 –

0

これは、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; 
     } 
    } 
関連する問題