2013-04-23 2 views
3

내 C# wpf 응용 프로그램에서 Datagrid (DataGridMeterValues)이 있습니다. 사용자가 셀의 편집 모드를 종료 할 때마다 CellEditEnding 이벤트가 트리거됩니다.C# WPF CellEditEnding 이벤트 후 DataGrid 셀 배경을 변경하십시오.

이제 이벤트가 트리거 될 때 셀의 배경을 변경하고 싶습니다.

은 내가 지금까지 무엇을 가지고 있습니다 :

나는 다음 코드를 사용하여 전체 행의 배경을 변경할 수 있어요
private void DataGridMeterValues_CellEditEnding(object sender, System.Windows.Controls.DataGridCellEditEndingEventArgs e) 
{ 

// Code to change background color here 

} 

:

e.Row.Background = Brushes.Yellow; 

이제 내 질문은, 내가 할 수 있습니다 동일하지만 전체 행이 아닌 1 개의 셀 (선택한 셀)에 대해서만

편집 : 이것은 데이터 그릿의 XAML입니다

<DataGrid Grid.Row="3" Grid.Column="1" AutoGenerateColumns="False" Name="DataGridMeterValues" ItemsSource="{Binding Path=MeterValuesList, UpdateSourceTrigger=PropertyChanged}" AlternatingRowBackground="LightGray" BorderBrush="Gray" BorderThickness="1" FrozenColumnCount="0" CanUserResizeColumns="False" CanUserResizeRows="False" Margin="2,0" CanUserSortColumns="False" SelectionMode="Single" CanUserReorderColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility="Column" GridLinesVisibility="All" AreRowDetailsFrozen="False" IsEnabled="True" CellEditEnding="DataGridMeterValues_CellEditEnding"> 
      <DataGrid.Resources> 
       <Style x:Key="DataGridBase" TargetType="Control"> 
        <Setter Property="LayoutTransform"> 
         <Setter.Value> 
          <TransformGroup> 
           <RotateTransform Angle="-90" /> 
           <ScaleTransform ScaleX="1" ScaleY="-1" /> 
          </TransformGroup> 
         </Setter.Value> 
        </Setter> 
        <Setter Property="TextOptions.TextFormattingMode" Value="Display" /> 
       </Style > 
       <Style TargetType="DataGridCell" BasedOn="{StaticResource DataGridBase}"/> 
       <Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource DataGridBase}"/>     
      </DataGrid.Resources> 

      <DataGrid.LayoutTransform> 
       <TransformGroup> 
        <RotateTransform Angle="90" /> 
        <MatrixTransform Matrix="-1, 0, 0, 1, 0, 0" /> 
       </TransformGroup> 
      </DataGrid.LayoutTransform> 

      <DataGrid.RowHeaderStyle > 
       <Style TargetType="DataGridRowHeader"> 
        <Setter Property="Content" Value="X" /> 
       </Style> 
      </DataGrid.RowHeaderStyle> 
      <DataGrid.Columns> 
       <DataGridTemplateColumn Header="Action" > 
        <DataGridTemplateColumn.CellTemplate > 
         <DataTemplate> 
          <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> 
           <Button Tag="{Binding}" Content="Activate" Width="50" BorderThickness="0" Margin="2" Background="{Binding Path=Activated}" Click="BtnActivate_Click" /> 
          </StackPanel> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
       <DataGridTextColumn Header="Name" Binding="{Binding Path=Title, UpdateSourceTrigger=PropertyChanged}" /> 
       <DataGridTextColumn Header="Meter Type" Binding="{Binding Path=Type, UpdateSourceTrigger=PropertyChanged}" /> 

      </DataGrid.Columns> 
     </DataGrid> 

답변

5
private void DataGridMeterValues_CellEditEnding(object sender, System.Windows.Controls.DataGridCellEditEndingEventArgs e) 
{ 

     FrameworkElement element = e.Column.GetCellContent(DataGridMeterValues.SelectedItem); 
     (element.Parent as DataGridCell).Background = new SolidColorBrush(Colors.Red); 

} 

I는 선택된 행 및 열에있는 셀의 구조 요소를 가져왔다. 그런 다음 Parent 속성을 사용하여 해당 요소에서 DataGridCell을 가져 와서 background 속성을 설정합니다. :)

DataGridCell 내에 여러 템플릿이있을 수 있습니다. DataGridCell을 가져 와서 배경 속성을 사용하는 것이 좋습니다.

+1

'SelectionUnit = "Cell"'으로 어떻게 할 수 있습니까? –

+1

오 그냥 방금'FrameworkElement 요소 = e.Column.GetCellContent (e.Row);'하고 잘 작동 :) –

관련 문제