在针对包含Checkbox的DataGridTemplateColumn替换DataGridCheckBoxColumn时,我发现了一种奇怪的行为。
<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>
我注意到的另一件事可能有助于解释这一点,即DataBridCheckBoxColumn中的复选框始终处于禁用状态,直到您实际双击包含的单元格。只有在编辑模式下,我才能访问复选框。
在我在DataGridTemplateColumn中创建的CheckBox中,复选框似乎总是处于活动状态,可以打开和关闭,甚至不用双击单元格。
顺便说一句我在Silverlight4中使用它,但我很确定在WPF中它必须是相同的。
有人可以向我解释为什么会这样吗? 谢谢,
答案 0 :(得分:0)
关于DataGridCheckBoxColumn
的双击,DataGridTemplateColumn
的情况下没有点击,我认为这是因为在DataGridCheckBoxColumn
CellTemplate
和{{1}内部本来可以用不同的方式实现。在EditingCellTemplate
的情况下,它将被定义为CellTemplate
,一旦您双击,您就进入编辑模式,即readonly
,然后您才能修改EditingCellTemplate
,这是有道理的
现在您已经定义了编辑模板和非编辑模板,因此复选框始终可以接受输入
关于为checkbox
模式中的checkbox
未遵循custom template
选项的主要问题,我认为这是因为您定义{{1}后的事实}自己即GridReadOnly
模板和cell templates
您有责任处理单元格的只读行为。在网格上应用的选项(如只读)对templatedcolumn案例