首页 > 解决方案 > IsHitTestVisible=false 正在禁用 DataGrid 的 ScrollBar

问题描述

我想禁止选择DataGrid,所以我将属性设置IsHitTestVisible为 false,但随后它也会禁用ScrollBar.

如何通过仍然禁用选择来启用滚动条DataGrid

我可以做的一件事是:
我可以更改DataGrid. 问题是当我说触发Property="DataGridRow.IsSelected"它不起作用。另一方面,如果我说TriggerProperty="DataGridCell.IsSelected"像这里所说的Row Selection in DataGrid,它只选择第一列而不是整行。此外,如果我说背景的值是透明的,它不会在单元格中显示文本。请帮忙。

<DataGrid x:Name="DGRunInfoItems" IsHitTesVisible="False" IsReadOnly="True" ColumnWidth="*" FontSize="{StaticResource BRControlNormalFontSize}" ScrollViewer.VerticalScrollBarVisibility="Auto" HeadersVisibility="None" CanUserAddRows="False" ItemsSource="{Binding RunViewModel.RunInfoDataTable}" AutoGenerateColumns="False">
  <DataGrid.Columns>
    <DataGridTextColumn Binding="{Binding Header}">
      <DataGridTextColumn.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
          <Style.Triggers>
            <Trigger Property="DataGridCell.IsSelected" Value="True">
              <Setter Property="Background" Value="Transparent"/>
            </Trigger>
          </Style.Triggers>
          <Style.Setters>
            <Setter Property="FontWeight" Value="Bold"/>
          </Style.Setters>
        </Style>
      </DataGridTextColumn.CellStyle>
    </DataGridTextColumn>
    <DataGridTextColumn Binding="{Binding Value}"/>
  </DataGrid.Columns>
  <DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
      <Setter Property="MinHeight" Value="28"/>
    </Style>
  </DataGrid.RowStyle>
</DataGrid>

标签: c#wpfxaml

解决方案


这终于奏效了。我通过删除 IsHitTestVisible 在样式的帮助下实现了它。如果它对这里的某人有帮助,那就是解决方案。我对整个 DataGrid 应用了一种样式。请参阅 DataGrid.CellStyle。(我从另一个 StackOverflow 帖子中获得了帮助,但找不到指向它的链接。)

<DataGrid x:Name="DGRunInfoItems"  IsReadOnly="True" ColumnWidth="*" FontSize="{StaticResource BRControlNormalFontSize}" ScrollViewer.VerticalScrollBarVisibility="Auto" HeadersVisibility="None" CanUserAddRows="False" ItemsSource="{Binding RunViewModel.RunInfoDataTable}" AutoGenerateColumns="False">
                    <DataGrid.CellStyle>
                        <Style TargetType="{x:Type DataGridCell}">
                            <Style.Triggers>
                                <Trigger Property="DataGridCell.IsSelected" Value="True">
                                    <Setter Property="BorderBrush">
                                        <Setter.Value>
                                            <SolidColorBrush Color="Transparent"/>
                                        </Setter.Value>
                                    </Setter>
                                    <Setter Property="Foreground"
                            Value="{DynamicResource
                                   {x:Static SystemColors.ControlTextBrushKey}}"/>
                                    <Setter Property="Background">
                                        <Setter.Value>
                                            <SolidColorBrush Color="Transparent"/>
                                        </Setter.Value>
                                    </Setter>
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </DataGrid.CellStyle>
                    <DataGrid.Columns>
                        <DataGridTextColumn Binding="{Binding Header}" FontWeight="Bold">
                        </DataGridTextColumn>
                        <DataGridTextColumn Binding="{Binding Value}"></DataGridTextColumn>
                    </DataGrid.Columns>
                    <DataGrid.RowStyle>
                        <Style TargetType="DataGridRow">
                            <Setter Property="MinHeight" Value="28"/>
                        </Style>
                    </DataGrid.RowStyle>
                </DataGrid> 

推荐阅读