2013-06-24 1 views
0

이 WPF-xaml 코드에 대한 질문이 있습니다. xaml을 많이 사용하지는 않았지만이 코드로 내가 원하는 것을 얻을 수 있었다. 하지만 나는 그것이 좋은 습관이 아니라고 생각합니다. 먼저 특정 셀의 일부 값에 따라 행을 빨간색에서 녹색 또는 회색으로 변경하고 싶습니다. 각 셀에 대해 실제로 하나의 트리거를 유지해야합니까, 아니면 전체 행에서 동일한 트리거를 수행 할 여지가 있습니까? 행을 선택했을 때 나는 또한 특정 색상을 설정하려는하지만 스타일 "에 isSelected"를 지원하지 않는 것 ...DataGrid의 트리거

<DataGrid AutoGenerateColumns="False" IsReadOnly="True" HorizontalAlignment="Stretch" Margin="200,50,5,5" ItemsSource="{Binding}" Name="dataGrid1" VerticalAlignment="Stretch" EnableRowVirtualization="True" SelectionChanged="dataGrid1_SelectionChanged" MouseDoubleClick="dataGrid1_MouseDoubleClick"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Width="1*" Header="File name" Binding="{Binding Path=Filename}"> 
       <DataGridTextColumn.ElementStyle> 
        <Style TargetType="{x:Type TextBlock}"> 
         <Setter Property="Background" Value="#68FF0000" /> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Errorcode}" Value="0"> 
           <Setter Property="Background" Value="LightGreen"/> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Filename}" Value="File not created"> 
           <Setter Property="Background" Value="LightGray" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </DataGridTextColumn.ElementStyle> 
      </DataGridTextColumn> 
      <DataGridTextColumn Width="1*" Header="Weight" Binding="{Binding Path=Info1}"> 
       <DataGridTextColumn.ElementStyle> 
        <Style TargetType="{x:Type TextBlock}"> 
         <Setter Property="Background" Value="#68FF0000" /> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Errorcode}" Value="0"> 
           <Setter Property="Background" Value="LightGreen" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Filename}" Value="File not created"> 
           <Setter Property="Background" Value="LightGray" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </DataGridTextColumn.ElementStyle> 
      </DataGridTextColumn> 
      <DataGridTextColumn Width="1*" Header="Rfid" Binding="{Binding Path=Info1}"> 
       <DataGridTextColumn.ElementStyle> 
        <Style TargetType="{x:Type TextBlock}"> 
         <Setter Property="Background" Value="#68FF0000" /> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Errorcode}" Value="0"> 
           <Setter Property="Background" Value="LightGreen" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Filename}" Value="File not created"> 
           <Setter Property="Background" Value="LightGray" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </DataGridTextColumn.ElementStyle> 
      </DataGridTextColumn> 
      <DataGridTextColumn Width="1*" Header="Date/Time" Binding="{Binding Datetime, StringFormat=\{0:yyyy.MM.dd HH:mm:ss\}}"> 
       <DataGridTextColumn.ElementStyle> 
        <Style TargetType="{x:Type TextBlock}"> 
         <Setter Property="Background" Value="#68FF0000" /> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Errorcode}" Value="0"> 
           <Setter Property="Background" Value="LightGreen" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Filename}" Value="File not created"> 
           <Setter Property="Background" Value="LightGray" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </DataGridTextColumn.ElementStyle> 
      </DataGridTextColumn> 
      <DataGridTextColumn Width="1*" Header="Error code" Binding="{Binding Path=Errorcode}"> 
       <DataGridTextColumn.ElementStyle> 
        <Style TargetType="{x:Type TextBlock}"> 
         <Setter Property="Background" Value="#68FF0000" /> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Errorcode}" Value="0"> 
           <Setter Property="Background" Value="LightGreen" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Filename}" Value="File not created"> 
           <Setter Property="Background" Value="LightGray" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </DataGridTextColumn.ElementStyle> 
      </DataGridTextColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

답변

2

을 나는 매우 DataGrid 경험이 아니에요, 그래서 이것은 수도 있지 최선의 선택이 될,하지만 난 당신이 아니라 개별 열보다 행 스타일링에 의해 계신 달성 할 수 있다고 생각 :

<DataGrid <!-- Your settings here -->> 
     <!-- Your column definitions here --> 
     <DataGrid.RowStyle> 
      <Style TargetType="DataGridRow"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=Errorcode}" Value="0"> 
         <Setter Property="Background" Value="LightGreen" /> 
         <!-- Other Setters --> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Path=Filename}" Value="File not created"> 
         <Setter Property="Background" Value="LightGray" /> 
        </DataTrigger> 

        <!-- Other Triggers --> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="Background" Value="Red" /> 
         <!-- Other Setters --> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </DataGrid.RowStyle> 
    </DataGrid> 

행운을 빕니다.

+0

Perfekt! 많이 도와 줬어! 감사합니다 – Nick3

+0

도와 줘서 기뻐요 = D – Chris