2016-06-16 3 views
2

코드에 DataTable의 열을 자동으로 생성하는 DataGrid이 있습니다. 열 X의 값이 FALSE이거나 무엇이든간에 행의 배경색을 변경해야합니다. eventargs로 할 수 있습니까? 어쩌면 행의 스타일을 변경할 수 있습니까? DataTriggers 열 값에 액세스하고 행의 배경색에 영향을 줍니까?WPF의 열 이름과 그 값을 기반으로하는 DataTriggers

EDIT 1 : 직접 전달 질문 : 일부 열의 값을 기준으로 행의 배경색을 변경하려면 어떻게해야합니까?

편집 2 : 나는이 작업을 수행 할 수있는 열 이벤트를 생성 기준 자료 :

편집 3 :

public static void OnAutoGeneratingColumn(object sender, System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs e) 
     { 
      try { 

       if (e.PropertyType == typeof(System.DateTime) && e.Column.Header.ToString() != "Data de Registo") 
        (e.Column as System.Windows.Controls.DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy"; 

       if (e.PropertyType == typeof(System.DateTime) && e.Column.Header.ToString() == "Data de Registo") 
        (e.Column as System.Windows.Controls.DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy HH:mm:ss"; 
       if (e.Column.Header.ToString() == "FT") 
       { 
        StringReader stringReader = new StringReader("<Style xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"" 
         + " TargetType=\"{x:Type DataGridCell}\">" 
         + " <Setter Property=\"Background\" Value=\"Red\"/>" 
         + " </Style>"); 
        XmlReader xmlReader = XmlReader.Create(stringReader); 
        Style style = (Style)System.Windows.Markup.XamlReader.Load(xmlReader); 
        e.Column.CellStyle = style; 
       } 
      } 
      catch (Exception) { } 
     } 

그래서 내가 칼럼의 배경 색상 (그 세포)하지만 내가 원하는 것은 변화 코딩 각 행의 값을 확인하고 값이 X이면 녹색을, 값이 Y 인 경우 녹색을 표시합니다.

+0

아니요 ... 전혀 아님. – int3

+0

미안하지만 ... 여기에있을 예정이 아니 었습니다 :-) – Fruchtzwerg

답변

3

DataGridStyleDataTrigger을 사용합니다. 그런 다음 바인딩 된 데이터 항목에 따라 형식을 지정합니다.

<DataGrid.RowStyle> 
    <Style TargetType="{x:Type DataGridRow}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=<!--Your property name here-->}" 
         Value="False"> 
       <Setter Property="Background" Value="<!-- Your desired Brush here-->" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.RowStyle> 

당신이 바인딩 된 데이터 항목의 기본 인덱서 속성에 액세스하려면, 경로 Path=[IndexerName] 또는 Path=[(sys:Int32)0]합니다.

+0

당신은 내 목숨을 구했습니다. 고맙습니다! "바인딩 경로"를 사용할 때마다 DataGrid가 올바르게 참조하는 객체를 참조하고 있습니까? – int3

+1

스타일을'DataGridRow' (그래서'DataGrid.RowStyle')로 설정하면 그 행의'DataContext'를 사용할 것입니다. 그 행의'DataContext'는'DataGrid' 논리에 의해 실제로'DataTable'의 바운드'Row [i]'입니다. – Adwaenyth

관련 문제