问题描述
在将DataGridCheckBoxColumn替换为包含复选框的DataGridTemplateColumn时,我发现了一种奇怪的行为。
<sdk:DataGrid Grid.Column="0" IsReadOnly="{Binding IsInReadOnlyMode}">
<sdk:DataGrid.Columns>
<sdk:DataGridCheckBoxColumn Header="Sales" Binding="{Binding Path=Sales}" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
当DataGrid为只读时,复选框也被禁用。上面的代码运行正常。
现在,如果我希望使用DataGridTemplateColumn实现相同的功能,则当DataGrid处于ReadOnly模式时,复选框似乎不会禁用自身。
<sdk:DataGrid Grid.Column="0" IsReadOnly="{Binding IsInReadOnlyMode}">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="Sales" >
<sdk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<Grid>
<CheckBox>
<CheckBox.IsChecked>
<Binding Path="Sales" Mode="TwoWay"/>
</CheckBox.IsChecked>
</CheckBox>
</Grid>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<CheckBox>
<CheckBox.IsChecked>
<Binding Path="Sales" Mode="TwoWay"/>
</CheckBox.IsChecked>
</CheckBox>
</Grid>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
我注意到的另一件事可能有助于解释这一点,那就是DataGridCheckBoxColumn中的复选框始终处于禁用状态,直到您实际双击包含的单元格。只有在进入编辑模式后,我才能访问该复选框。
在我自己在DataGridTemplateColumn中创建的复选框中,复选框似乎始终处于活动状态,甚至无需首先双击单元格就可以选中和取消选中。
顺便说一句,我在Silverlight4中使用它,但我非常确定它在WPF中一定是相同的。
有人能给我解释一下为什么会这样吗?谢谢,
推荐答案
在DataGridCheckBoxColumn
情况下双击,而在DataGridTemplateColumn
情况下没有单击,我认为发生这种情况是因为在DataGridCheckBoxColumn
和CellTemplate
和EditingCellTemplate
中实现方式不同。在CellTemplate
的情况下,它将被定义为readonly
,一旦您双击,您将进入编辑模式,即EditingCellTemplate
,只有到那时,您才能修改checkbox
,这是有意义的。
现在,由于您定义的编辑和非编辑模板相同,因此复选框始终准备好接受输入
关于您的主要问题,即为什么custom template
模式中的checkbox
不遵循GridReadOnly
选项,我认为这是因为一旦您定义了cell templates
即cellEditing
模板和non-editing celltemplate
,您就有责任处理单元格的只读行为。应用于网格的选项(如只读)在模板列大小写中不会有任何影响 这篇关于将DataGridCheckBoxColumn替换为DataGridTemplateColumn时出现异常行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!