2013-02-09 1 views
2

다음은 셀을 선택할 때 배경을 설정하는 방법의 예입니다. 실제로 셀을 클릭하여 편집하면 색상이 변경됩니다. 셀을 편집 할 때 트리거 속성이 있습니까? 나는 배경을 바꾸지 않을 것이다.셀을 편집하는 동안 WPF DataGrid 셀 배경을 어떻게 변경합니까?

<DataGrid Name="DG1" ItemsSource="{Binding}" SelectionUnit="Cell" > 
    <DataGrid.CellStyle> 
     <Style TargetType="DataGridCell" > 
      <Style.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
        <Setter Property="Background" Value="SeaGreen"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.CellStyle> 
</DataGrid> 

내 자신의 질문에 답하면 셀 배경색이 SystemColors.WindowBrushKey에 기초한 것처럼 보입니다. 그런 <SolidColorBrush x:Key="{x:Static SystemColors.WindowBrushKey}" Color="Red" />과 같은 리소스를 무시하면 트릭을 만들었습니다. `

답변

7

IsEditing 상태의 기존 스타일에 다른 트리거를 추가 할 수 있습니다. 그런 다음 트리거 내부에 DataGridCell에 대해 ControlTemplate을 설정할 수 있습니다.

<Trigger Property="IsEditing" Value="True"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="DataGridCell"> 
       <TextBox Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Text, Mode=TwoWay, UpdateSourceTrigger=Default}" 
         HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Padding="0" BorderThickness="0" Background="SeaGreen"/> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Trigger> 
+0

감사합니다. 훌륭한 솔루션이었습니다. –

+2

좋은 해결책, 한 가지 문제 : 텍스트 상자가 자동으로 포커스를 맞추지 않습니다. FocusManager.FocusedElement = "{Binding RelativeSource = {RelativeSource Self}}" – Mark

+0

모든 열의 형식이 DataGridTextColumn 인 경우에만 제대로 작동합니다. 텍스트 상자에 자동으로 포커스를 지정하려면 텍스트 특성에 다음 특성을 추가합니다. 다른 유형의 열 (예 : CheckBox가있는 DataGrigTemplateColumn)이 있으면 셀을 클릭 한 후 CheckBox 대신 TextBox가됩니다. 어떤 제안을 트리거에서 열 유형을 구별하는 방법? – dedpichto

관련 문제