WPF DataGridComboBoxColumn的ComboBox仅在DataGrid的IsReadOnly=FALSE时可见。

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>
1个回答

10

所有内置的DataGrid列都有两种样式,一种是在单元格不处于编辑模式下的样式,另一种是在单元格处于编辑模式下的样式。通常非编辑模式下仅显示一个文本块,而不是您可能期望的实际控件(ComboBox、TextBox等)。一旦开始编辑单元格,文本块将被相应的控件替换。

如果您将 datagrid 设置为 IsReadOnly = true,则意味着单元格永远不会进入编辑模式,这就是您所看到的行为。

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

还要注意,如果您正在使用内置列(例如 DataGridCheckBoxColumn)并为其指定了 ElementStyle(例如居中复选框),则无论 datagrid 是否设置为 IsReadOnly = true,该列的单元格都是可编辑的。这是因为当您指定 ElementStyle 时,您正在替换内置样式,该内置样式包含使复选框在 datagrid 是只读时也只读的逻辑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接