【问题标题】:Odd behaviour when replacing DataGridCheckBoxColumn with a DataGridTemplateColumn用 DataGridTemplateColumn 替换 DataGridCheckBoxColumn 时的奇怪行为
【发布时间】:2011-09-21 19:24:37
【问题描述】:

在将 DataGridCheckBoxColumn 替换为包含 Checkbox 的 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 处于只读模式时,复选框似乎不会自行禁用。

<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 中创建的 CheckBox 中,该复选框似乎始终处于活动状态,甚至无需先双击单元格即可打开和关闭。

顺便说一句,我在 Silverlight4 中使用它,但我很确定它在 WPF 中必须相同。

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

【问题讨论】:

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


    【解决方案1】:

    关于DataGridCheckBoxColumn 的双击和DataGridTemplateColumn 的不单击,我认为这是因为DataGridCheckBoxColumn 内部CellTemplateEditingCellTemplate 的实现方式不同。如果是CellTemplate,它将被定义为readonly,一旦你双击你就会进入编辑模式,即EditingCellTemplate,只有这样你才能修改checkbox,这是有意义的。

    现在在您的情况下,您已经定义了相同的编辑和非编辑模板,因此复选框始终准备好接受输入

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-20
      • 2012-02-24
      • 1970-01-01
      • 2012-04-25
      • 2012-08-31
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多