只有当DataGrid具有IsReadOnly = FALSE时,WPF DataGridComboBoxColumn的ComboBox才可见

时间:2010-06-18 14:29:44

标签: wpf visible datagridcomboboxcolumn readonly-attribute

当DataGrid设置为IsReadOnly = FALSE时,为什么只有通过在空单元格中双击才能看到该列中的ComboBox ???

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

使用DataTemplateColumn一如既往地工作...... DataGridComboBoxColumn有什么问题?

工作的:

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

1 个答案:

答案 0 :(得分:10)

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

创建DataGridTemplateColumn时,您必须替换所有内置的datagrid逻辑。例如,如果您希望在数据网格只读时您的模板化列是只读的,那么您必须手动将这两个值绑定在一起。 如果你想获得与内置列相同的行为(单元格未处于编辑模式时的文本块),那么你必须使用触发器来提供适当的控制模板。

另请注意,如果您使用内置列(例如DataGridCheckBoxColumn)并为其设置ElmentStyle(例如使checkBoxes居中),则尽管datagrid设置为IsReadOnly = true,但列的单元格都是可编辑的。发生这种情况是因为当您指定ElmentStyle时,您正在替换内置样式,该样式包含在数据网格只读时使复选框只读的逻辑。