WPF Datagrid模板列编辑事件和交替列颜色

时间:2010-10-06 18:18:53

标签: wpf datagrid background-color

我一直在使用WPF安静。我知道WPF中的DataGrid没有Column集合作为依赖项属性,因此无法动态添加列。

我正在开发的应用程序是高度动态的,所以列的数量是未知的。所以我从后面的代码创建DataGridTemplate列。

问题1 :我希望交替列具有不同的背景颜色。我如何以编程方式执行? (DataGridTemplateColumn没有Background属性,因此我无法找到解决方案)

问题2 :我的DataGridTemplateColumn有一个DataTemplate,其中有一个包含2个TextBox的StackPanel。 DataGrid中有一个名为CellEditing Event的事件,在编辑单元格时会触发该事件。它适用于默认列,但对于我的列,如果我编辑那些TextBox,该事件是鼻涕被解雇!那么我该如何实现呢?

(我有时会对WPF感到惊讶!!!)

1 个答案:

答案 0 :(得分:2)

问题零如果在设置数据网格时使用AutoGenerateColumns="true",则可以为您生成数据网格中的列。它以后不会动态添加列,但是如果重置itemssource可能会这样做? (对那个不肯定)

问题一 DataGrid具有属性AlternatingRowBackgroundAlternationCount来设置交替的背景。但我没有看到网格本身交替列背景的任何内容。您可以在datatemplate中执行此操作:

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <TextBlock Background="Red" Foreground="White">I'm Red</TextBlock>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

但即使是margin = 0,我仍然看到里面的边距,所以如果你使用任何非常明显的颜色,细胞看起来很有趣。

问题二你的意思是CellEndEditing事件吗?因为我没有看到任何其他细胞编辑事件。我尝试了以下方法:

    <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False" CellEditEnding="DataGrid_CellEditEnding">
        <DataGrid.Columns>
            <DataGridTextColumn Header="A" Binding="{Binding Field0}" />
            <DataGridTemplateColumn Header="BC">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding Field1}"/>
                            <TextBlock Text="{Binding Field2}" />
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBox Text="{Binding Field1}"/>
                            <TextBox Text="{Binding Field2}" />
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

只要CellEditingTemplate中的任何一个文本框失去焦点,无论数据是否发生变化,我的DataGrid_CellEditEnding事件处理程序都会被调用,所以事情似乎对我有用。

您使用的是其他DataGrid而不是“内置”WPF吗?