WPF datagrid IsReadOnly异常

时间:2015-12-03 11:00:10

标签: c# wpf checkbox datagrid readonly-attribute

我有一个数据网格,我添加了一个Checkbox列。我想整个数据网格是除了Checkbox列之外的IsReadOnly。我试过了:

  <DataGrid x:Name="DataGridView_Customer_Information" HorizontalAlignment="Left" Margin="10,200,0,0" VerticalAlignment="Top" Height="410" Width="697" CanUserAddRows="False" IsReadOnly="True" >
        <DataGrid.Columns>
            <DataGridCheckBoxColumn x:Name="CheckBoxSelectRow" IsReadOnly="False"/>
        </DataGrid.Columns>
    </DataGrid>

但我可以想象<DataGridCheckBoxColumn x:Name="CheckBoxSelectRow" IsReadOnly="False"/>被先前的陈述所推翻。由于只有一列需要允许编辑(允许勾选复选框),是否可以在IsReadOnly中进行预测?

先谢谢

2 个答案:

答案 0 :(得分:2)

您有两种选择。 两者均假设DataGrid.AutoGenerateColumnsFalse

  1. IsReadOnly="True"元素中移除DataGrid并为每列设置IsReadOnly:其中FalseDataGridCheckBoxColumn,其余为True列。

  2. 保留IsReadOnly="True" DataGrid原样,而不是DataGridCheckBoxColumn在模板中添加DataGridTemplateColumn CheckBox

    <DataGrid IsReadOnly="True" AutoGenerateColumns="False" ItemsSource="{Binding Guests}">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Is invited">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding IsInvited}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
    
            <DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="False"/>
        </DataGrid.Columns>
    </DataGrid>
    
  3. 第二种方法有另一个好处。 DataGridCheckBoxColumn的默认行为很奇怪 - 要更改复选标记,您需要先选择单元格,这样做不方便。 CheckBox内的DataGridTemplateColumn接受用户输入而不选择单元格,这看起来很自然。

答案 1 :(得分:0)

您可以将其他列IsReadOnly设置为false

<强>更新

或者您可以为其他列添加DataGrid.Resources个样式

<DataGrid.Resources>
    <Style TargetType="{x:Type DataGridTextColumn}">
        <Setter Property="IsReadOnly" Value="True" />
    </Style>
</DataGrid.Resources>