将DataGridCheckBoxColumn替换为DataGridTemplateColumn时出现异常行为 [英] Odd behaviour when replacing DataGridCheckBoxColumn with a DataGridTemplateColumn

查看:23
本文介绍了将DataGridCheckBoxColumn替换为DataGridTemplateColumn时出现异常行为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在将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情况下没有单击,我认为发生这种情况是因为在DataGridCheckBoxColumnCellTemplateEditingCellTemplate中实现方式不同。在CellTemplate的情况下,它将被定义为readonly,一旦您双击,您将进入编辑模式,即EditingCellTemplate,只有到那时,您才能修改checkbox,这是有意义的。

现在,由于您定义的编辑和非编辑模板相同,因此复选框始终准备好接受输入

关于您的主要问题,即为什么custom template模式中的checkbox不遵循GridReadOnly选项,我认为这是因为一旦您定义了cell templatescellEditing模板和non-editing celltemplate,您就有责任处理单元格的只读行为。应用于网格的选项(如只读)在模板列大小写中不会有任何影响

这篇关于将DataGridCheckBoxColumn替换为DataGridTemplateColumn时出现异常行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆