删除所选行的默认样式

时间:2014-11-04 13:29:17

标签: c# wpf datagrid

我知道这个问题很多,但我只在XAML代码文件中看到过。
我正在处理数据网格扩展,所以我在C#代码文件中,我想知道如何删除所选行的默认样式(在我的情况下,我希望样式没有任何变化,我在行标题中有一个图像显示选择的行。)

附带问题,我们可以选择像“Ctrl”这样的选择以及C#代码中的方式吗?

由于

修改

我试试这段代码:

Style oRow = new Style(typeof(DataGridRow));
DataTrigger oTrigger2 = new DataTrigger();
Binding oBind = new Binding();
oBind.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(DataGridRow), 1);
oBind.Path = new PropertyPath(DataGridRow.IsSelectedProperty);
oTrigger2.Binding = oBind;
oTrigger2.Value = true;
oTrigger2.Setters.Add(new Setter(DataGridRow.BackgroundProperty, Brushes.Khaki));
oRow.Triggers.Add(oTrigger2);
this.RowStyle = oRow;

目前,我试图将选定的背景放入卡其色进行测试。但我得到了旧的蓝色亮点。

修改2

基于Sinatr的想法,我更改DatagridRow for DatagridCell并以:

结束
Style oRow = new Style(typeof(DataGridCell));
DataTrigger oTrigger2 = new DataTrigger();
Binding oBind = new Binding();
oBind.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(DataGridRow), 1);
oBind.Path = new PropertyPath(DataGridRow.IsSelectedProperty);
oTrigger2.Binding = oBind;
oTrigger2.Value = true;
oTrigger2.Setters.Add(new Setter(DataGridCell.BackgroundProperty, null));
oTrigger2.Setters.Add(new Setter(DataGridCell.BorderBrushProperty, null));
oRow.Triggers.Add(oTrigger2);
this.RowStyle = oRow;

我只需要获取行的前景来设置单元格的前景。但是我用这个解决方案得到了一个新问题,可以将背景设置为null或者我应该将它绑定到thr行背景吗?

1 个答案:

答案 0 :(得分:0)

您必须替换CellStyle控件模板。

例如,这个愚蠢的模板

<DataGrid x:Name="dataGrid">
    <DataGrid.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="DataGridCell">
                        <TextBlock Text="1" Background="Khaki" Foreground="Red"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGrid.CellStyle>
</DataGrid>

将产生此输出(仅适用于1 Tuple<string, string, string>):

对于选定或未选择的项目,它保持不变。

显然你必须更加正确地实施它,但给出答案应该给你一个想法。