【问题标题】:How to make all the columns non-focusable如何使所有列不可聚焦
【发布时间】:2015-08-09 18:23:35
【问题描述】:

要使列不可聚焦,可以设置其单元格的样式,如in some answers on StackOverflow 所示。但是,如果希望设置 all 列的 all 单元格,这开始看起来像是不必要的代码重复,因为需要将单元格样式添加到每一列定义。

有没有办法一次为所有单元格(可能是所有列的单元格,或所有数据网格)设置单元格样式?

我尝试执行以下操作,但它在编译期间产生了解析错误,猜测是因为我所指的样式在访问它时尚未定义。

<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>

【问题讨论】:

    标签: c# wpf xaml datagrid styles


    【解决方案1】:

    您可以使用隐式样式(看看here)。 您只需以这种方式从样式和 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>
    

    通过这种方式,您可以一次声明您的风格。希望对你有帮助。

    【讨论】:

    • 做到了。 +1 以获得清晰的答案,代码示例指向博客的链接以获取更多信息。这个答案是一个答案应该是什么样子的教科书示例!另一方面,我开始相信我并不真正理解 x:Key 为何存在以及它的作用的概念......
    • 感谢@KonradViltersten 的赞美 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多