我有一个数据网格,我添加了一个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中进行预测?
先谢谢
答案 0 :(得分:2)
您有两种选择。
两者均假设DataGrid.AutoGenerateColumns
为False
。
从IsReadOnly="True"
元素中移除DataGrid
并为每列设置IsReadOnly
:其中False
为DataGridCheckBoxColumn
,其余为True
列。
保留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>
第二种方法有另一个好处。 DataGridCheckBoxColumn
的默认行为很奇怪 - 要更改复选标记,您需要先选择单元格,这样做不方便。 CheckBox
内的DataGridTemplateColumn
接受用户输入而不选择单元格,这看起来很自然。
答案 1 :(得分:0)
您可以将其他列IsReadOnly
设置为false
。
<强>更新强>
或者您可以为其他列添加DataGrid.Resources
个样式
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridTextColumn}">
<Setter Property="IsReadOnly" Value="True" />
</Style>
</DataGrid.Resources>