1

我有一个数据网格,我在其中添加了一个复选框列。我希望整个数据网格是 IsReadOnly 除了 Checkbox 列。我努力了:

  <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 中做出预期?

先谢谢了

4

2 回答 2

2

你有两个选择。两者都假设,DataGrid.AutoGenerateColumnsFalse

  1. IsReadOnly="True"DataGrid元素中删除并为每一列设置:IsReadOnly对于False,DataGridCheckBoxColumn其余True列。

  2. 保持原样,而不是IsReadOnly="True"使用内部模板添加:DataGridDataGridCheckBoxColumnDataGridTemplateColumnCheckBox

    <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>
    

第二种方法还有另一个好处。的默认行为DataGridCheckBoxColumn很奇怪 - 要更改复选标记,您需要先选择单元格,这不方便。CheckBoxinsideDataGridTemplateColumn接受用户输入而不选择单元格,这看起来很自然。

于 2015-12-03T11:20:28.410 回答
0

您可以将其他列设置IsReadOnlyfalse

更新

或者您可以添加到DataGrid.Resources其他列的样式中

<DataGrid.Resources>
    <Style TargetType="{x:Type DataGridTextColumn}">
        <Setter Property="IsReadOnly" Value="True" />
    </Style>
</DataGrid.Resources>
于 2015-12-03T11:04:45.267 回答