4

为什么当 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>
4

1 回答 1

10

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

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

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

于 2010-07-17T08:15:36.840 回答