WPF 数据网格 IsReadOnly 异常
WPF datagrid IsReadOnly exception
我有一个数据网格,我在其中添加了一个复选框列。我希望整个数据网格是 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 中做出预期?
在此先致谢
您可以将彼此的列IsReadOnly
设置为false
。
更新
或者您可以为其他列添加 DataGrid.Resources
样式
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridTextColumn}">
<Setter Property="IsReadOnly" Value="True" />
</Style>
</DataGrid.Resources>
你有两个选择。
两者都假设 DataGrid.AutoGenerateColumns
是 False
.
从 DataGrid
元素中删除 IsReadOnly="True"
并为每一列设置 IsReadOnly
:False
for 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
的默认行为很奇怪 - 要更改复选标记,您需要先到 select 单元格,这很不方便。 CheckBox
在 DataGridTemplateColumn
中接受用户输入 没有 selecting 单元格,这看起来很自然。
我有一个数据网格,我在其中添加了一个复选框列。我希望整个数据网格是 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 中做出预期?
在此先致谢
您可以将彼此的列IsReadOnly
设置为false
。
更新
或者您可以为其他列添加 DataGrid.Resources
样式
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridTextColumn}">
<Setter Property="IsReadOnly" Value="True" />
</Style>
</DataGrid.Resources>
你有两个选择。
两者都假设 DataGrid.AutoGenerateColumns
是 False
.
从
DataGrid
元素中删除IsReadOnly="True"
并为每一列设置IsReadOnly
:False
forDataGridCheckBoxColumn
,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
的默认行为很奇怪 - 要更改复选标记,您需要先到 select 单元格,这很不方便。 CheckBox
在 DataGridTemplateColumn
中接受用户输入 没有 selecting 单元格,这看起来很自然。