如何使所有的列不可聚焦

本文关键字:聚焦 何使所 | 更新日期: 2023-09-27 18:07:14

要使列不可聚焦,可以设置其单元格的样式,如StackOverflow上的一些答案所示。但是,如果希望将的所有单元格设置为的所有列,则开始看起来像不必要的代码重复,因为需要将单元格样式添加到每个列定义中。

是否有一种方法可以一次性设置所有单元格(所有列的单元格,或者所有数据网格)的单元格样式?

我试着做下面的事情,但是它在编译过程中产生了一个解析错误,大概是因为我引用的样式在访问它的时候还没有定义。

<DataGrid AutoGenerateColumns="False"
          IsReadOnly="True"
          CellStyle="{StaticResource NoFocusOncell}"
          ItemsSource="{...}">
  <DataGrid.Resources>
    <Style x:Key="NoFocusOnCell"
           TargetType="{x:Type DataGridCell}">
      <Setter Property="IsHitTestVisible" Value="False" />
    </Style>
    ...
  </DataGrid.Resources>
  ...
</DataGrid>

如何使所有的列不可聚焦

您可以使用隐式样式(看这里)。你只需要从样式和CellStyle属性中删除键,如下所示:

<DataGrid AutoGenerateColumns="False"
        IsReadOnly="True"
        ItemsSource="{Binding}">
    <DataGrid.Resources>
        <Style TargetType="{x:Type DataGridCell}">
            <Setter Property="IsHitTestVisible" Value="False" />
        </Style>
    </DataGrid.Resources>
    <DataGrid.Columns>
        ...
    </DataGrid.Columns>
</DataGrid>
通过这种方式,你可以只声明一次你的样式。我希望它能帮助你。