我一直在使用WPF安静。我知道WPF中的DataGrid没有Column集合作为依赖项属性,因此无法动态添加列。
我正在开发的应用程序是高度动态的,所以列的数量是未知的。所以我从后面的代码创建DataGridTemplate列。
问题1 :我希望交替列具有不同的背景颜色。我如何以编程方式执行? (DataGridTemplateColumn没有Background属性,因此我无法找到解决方案)
问题2 :我的DataGridTemplateColumn有一个DataTemplate,其中有一个包含2个TextBox的StackPanel。 DataGrid中有一个名为CellEditing Event的事件,在编辑单元格时会触发该事件。它适用于默认列,但对于我的列,如果我编辑那些TextBox,该事件是鼻涕被解雇!那么我该如何实现呢?
(我有时会对WPF感到惊讶!!!)
答案 0 :(得分:2)
问题零如果在设置数据网格时使用AutoGenerateColumns="true"
,则可以为您生成数据网格中的列。它以后不会动态添加列,但是如果重置itemssource可能会这样做? (对那个不肯定)
问题一 DataGrid具有属性AlternatingRowBackground
和AlternationCount
来设置交替的行背景。但我没有看到网格本身交替列背景的任何内容。您可以在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吗?