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

时间:2017-06-26 10:05:12

标签: c# wpf xaml datagrid selection

全新的SO和全新的WPF数据网格。

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

我试图将数据显示到数据网格中。到现在为止还挺好。 我试图让用户在datagrid中选择单元格。到现在为止还挺好。 我想在特定列上禁用选择单元格。

请参阅链接中的图片。

如何在Torque列或Average列上禁用选择单元格,让用户只选择Mes1 Mes2 Mes3列上的单元格

Example of the datagrid

2 个答案:

答案 0 :(得分:2)

如果要阻止某些列中的单元格被选中,可以使用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>
  

我正在玩代码。但是当我点击例如Column Mes 1中的一个单元格,然后使用键盘进行导航时,可以聚焦Torque和Average列的单元格: - (

我猜你必须将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>

答案 1 :(得分:1)

可以使用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>