C# WPF datagrid Ändern Zelle hintergrund nach CellEditEnding Veranstaltung
Ich habe eine Datagrid (DataGridMeterValues) in meinem C# - wpf-Anwendung. Jedesmal, wenn der Benutzer beendet den Bearbeiten-Modus einer Zelle, die CellEditEnding - Ereignis ausgelöst wird.
Nun möchte ich die Hintergrundfarbe der Zelle, wenn das Ereignis ausgelöst wird.
Dies ist, was ich so weit gekommen:
private void DataGridMeterValues_CellEditEnding(object sender, System.Windows.Controls.DataGridCellEditEndingEventArgs e)
{
//Code to change background color here
}
Ich bin in der Lage, ändern Sie den hintergrund der gesamten Zeile mit folgenden code:
e.Row.Background = Brushes.Yellow;
Nun meine Frage, kann ich das gleiche tun, aber dann nur für 1 Zelle (der gewählten) nicht die gesamte Zeile
EDIT: Dies ist der XAML-Code für das datagrid -
<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>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich holte die framework-element der Zelle in der ausgewählten Zeile und Spalte. Dann bekam ich DataGridCell aus, dass element über die Parent-Eigenschaft, und legen Sie seine background-Eigenschaft. 🙂
Es können mehrere Vorlagen im DataGridCell. Ist es besser, holten wir die DataGridCell und seine background-Eigenschaft.
SelectionUnit="Cell"
?FrameworkElement element = e.Column.GetCellContent(e.Row);
und funktioniert gut 🙂