当DataGridCell.IsEditing为true时,如何更改DataGridRow Color?

时间:2015-03-02 06:06:08

标签: wpf xaml datagrid datagridcell

如果DataGridCell.IsEditing为true,如何更改DataGridRow Color?

当用户双击单元格时,它会突出显示文本并取消选择整行(i:e将行颜色更改为透明)。只应突出显示当时选择的内容以及用户在编辑或离开字段后失去焦点时,可以再次突出显示该行,具体取决于光标所在的行。

    <DataGrid.CellStyle>
                <Style TargetType="DataGridCell">
                    <Style.Triggers>
                        <Trigger Property="DataGridCell.IsEditing" Value="True">
                            <Setter Property="BorderThickness" Value="3" />                          
                            <Setter Property="BorderBrush" Value="DarkBlue" />    

//Change DataGridRow BackGroudCorlor to transparent.                           
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </DataGrid.CellStyle>

1 个答案:

答案 0 :(得分:1)

您可以使用datagrid的BeginningEdit事件和CellEditEnding事件来实现相同的目的。请参阅下面的代码。

 <StackPanel>            
        <DataGrid BeginningEdit="DataGrid_BeginningEdit" CellEditEnding="DataGrid_CellEditEnding" x:Name="dgr"></DataGrid>
    </StackPanel>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        ObservableCollection<person> lst = new ObservableCollection<person>();
        for (int i = 0; i < 10; i++)
        {
            lst.Add(new person() { FirstName = "Test" + i, LastName = "Lst" + i });

        }
        dgr.ItemsSource = lst;

    }

    private void DataGrid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
    {
       e.Row.Resources.Add(SystemColors.HighlightBrushKey, Brushes.Transparent);
    }

    private void DataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
        e.Row.Resources.Remove(SystemColors.HighlightBrushKey);            
    }
}