2013-02-09 5 views
2

Ниже приведен пример того, как установить фон при выборе ячейки, но когда я действительно нажимаю внутри ячейки, чтобы изменить его, цвет меняется. Существует ли свойство триггера, когда редактируется ячейка? Я бы хотел, чтобы фон не менялся.Как изменить фон ячейки WPG 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. Затем вы можете установить ControlTemplate для DataGridCell внутри триггера.

<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. Если есть столбец другого типа, скажем DataGrigTemplateColumn с CheckBox, то после нажатия на ячейку он становится TextBox вместо CheckBox. Любое предложение о том, как различать тип столбца в триггере? – dedpichto

Смежные вопросы