C# WPF Datagrid 如何禁用特定列上的选择单元格

C# WPF Datagrid how to disable selection cell on specific column

SO 上的全新功能和 WPF 数据网格的全新功能。

我一直在搜索有关 Datagrid 的所有已打开线程,但找不到我的问题的任何答案。

我正在尝试将数据显示到数据网格中。到目前为止,一切都很好。 我试图让用户 select 数据网格中的单元格。到目前为止,一切都很好。 我想禁用特定列上的 selection 单元格。

查看 link 中的图像。

如何禁用扭矩列或平均列上的 select 离子单元并让用户 select 仅在列 Mes1 Mes2 Mes3

可以使用 CellTemplate,在下面的示例中,其中一列单元格将是图像:

<DataGrid ItemsSource="{Binding Customers}" AutoGenerateColumns="False" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
        <DataGridTemplateColumn Header="Image" Width="SizeToCells" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Image Source="{Binding Image}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

如果您想阻止某些列中的单元格被选中,您可以使用 DataGridCell 样式,将这些单元格的 IsHitTestVisible 属性 设置为 true :

<DataGrid x:Name="dataGrid1">
    <DataGrid.Resources>
        <Style TargetType="{x:Type DataGridCell}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value="Torque">
                    <Setter Property="IsHitTestVisible" Value="False"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value="Average">
                    <Setter Property="IsHitTestVisible" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.Resources>
</DataGrid>

I am just playing with the code. But when I click on a cell in for example Column Mes 1, and then use keyboard to navigate, cells of column Torque and Average can be focused :-(

我猜你必须将 IsEnabled 属性 设置为 false 然后:

<DataTrigger Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value="Torque">
    <Setter Property="IsHitTestVisible" Value="False"/>
    <Setter Property="IsTabStop" Value="False"/>
    <Setter Property="IsEnabled" Value="False"/>
</DataTrigger>