2010-06-18 55 views
4

为什么当DataGrid设置为IsReadOnly = FALSE时,该列中的ComboBox只能通过在空单元格中双击来显示?WPF DataGridComboBoxColumn的ComboBox只有在DataGrid的IsReadOnly = FALSE时才可见

<DataGridComboBoxColumn Width="*" IsReadOnly="False" Header="test" /> 

使用DataTemplateColumn一如既往...... DataGridComboBoxColumn有什么问题吗?

作品:

<DataGridTemplateColumn Header="Schoolclass"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <ComboBox Background="Blue" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

回答

9

所有内置DataGridColumns有两种风格。一个用于单元格未处于编辑模式时,另一个单元格处于编辑模式。通常情况下,非编辑模式只是显示一个文本块,而不是您可能期望的实际控件(组合框,文本框等)。一旦开始编辑单元格,文本块将被替换为适当的控件。 如果您将datagrid设置为IsReadOnly = true,那么这意味着单元格永远不会进入其编辑模式,这就是您所看到的行为。

当创建DataGridTemplateColumn时,您必须替换所有内置的datagrid逻辑。作为一个例子,如果你希望你的模板列是只读的,当datagrid是只读的,那么你必须手动将这两个值绑定在一起。 如果你想获得与内建列(当单元格不处于编辑模式时的textblock)相同的行为,那么你必须使用触发器来提供适当的控制模板。另外请注意,如果您使用内置列(例如DataGridCheckBoxColumn),并且您使用了ElmentStyle(例如将复选框居中),那么列的单元格都是可编辑的,尽管数据网格设置为IsReadOnly = true 。发生这种情况的原因是,当您指定ElmentStyle时,您将替换内置样式,其中包含逻辑,以在数据网格为只读时使复选框为只读。

+0

已经发现了;-)但很好总结:) – msfanboy 2010-07-17 10:01:18

相关问题