使用DataGridTemplateColumn替换DataGridCheckBoxColumn时出现奇怪的行为

时间:2011-06-24 06:56:47

标签: c# .net wpf silverlight silverlight-4.0

在针对包含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中它必须是相同的。

有人可以向我解释为什么会这样吗? 谢谢,

1 个答案:

答案 0 :(得分:0)

关于DataGridCheckBoxColumn的双击,DataGridTemplateColumn的情况下没有点击,我认为这是因为在DataGridCheckBoxColumn CellTemplate和{{1}内部本来可以用不同的方式实现。在EditingCellTemplate的情况下,它将被定义为CellTemplate,一旦您双击,您就进入编辑模式,即readonly,然后您才能修改EditingCellTemplate,这是有道理的

现在您已经定义了编辑模板和非编辑模板,因此复选框始终可以接受输入

关于为checkbox模式中的checkbox未遵循custom template选项的主要问题,我认为这是因为您定义{{1}后的事实}自己即GridReadOnly模板和cell templates您有责任处理单元格的只读行为。在网格上应用的选项(如只读)对templatedcolumn案例

没有任何影响