WPF数据网格IsReadOnly异常
本文关键字:IsReadOnly 异常 网格 数据网 数据 WPF | 更新日期: 2023-09-27 18:25:25
我有一个数据网格,在其中我添加了一个复选框列。我希望除了复选框列之外,整个数据网格都是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中进行预期?
感谢先进的
您有两个选项。两者都假定DataGrid.AutoGenerateColumns
是False
。
-
从
DataGrid
元素中删除IsReadOnly="True"
,并为每列设置IsReadOnly
:DataGridCheckBoxColumn
为False
,其余列为True
。 -
将
IsReadOnly="True"
保留为DataGrid
,并在模板中添加DataGridTemplateColumn
和CheckBox
,而不是DataGridCheckBoxColumn
<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
的默认行为很奇怪——要更改复选标记,需要先选择单元格,这很不方便。DataGridTemplateColumn
中的CheckBox
接受用户输入,而不需要选择单元格,这看起来很自然。
您可以将其他列的IsReadOnly
设置为false
。
更新
或者您可以将添加到其他列的DataGrid.Resources
样式中
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridTextColumn}">
<Setter Property="IsReadOnly" Value="True" />
</Style>
</DataGrid.Resources>