2021.1.8

DataGridの選択を無効(Disable)にする

DataGridのデフォルトでは行やセルを選択することができるので、閲覧のみ可能な一覧を表示したいだけといった場合、クリック時の選択やフォーカスを無効にする必要があります。

コード

対応としては、DataGridRowとDataGridCellのFocusableをfalseStyle.Triggersで選択時の背景色やフォントの設定を上書きするようにします。


<DataGrid AutoGenerateColumns="False" CanUserAddRows="False" AlternatingRowBackground="#f8f8f8">

    <DataGrid.ItemContainerStyle>
        <Style TargetType="{x:Type DataGridRow}">
            <Setter Property="Focusable" Value="false"/>
        </Style>
    </DataGrid.ItemContainerStyle>
    <DataGrid.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
            <Setter Property="Focusable" Value="false"/>
            <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 Header="商品名" Binding="{Binding Name}" Width="200"/>
        <DataGridTextColumn Header="金額" Binding="{Binding Price}" Width="100"/>
        <DataGridTextColumn Header="備考" Binding="{Binding Description}" Width="*"/>
    </DataGrid.Columns>
</DataGrid>

Focusableをfalseに設定しただけでは、クリック時に行の背景色が変化してしまうので、合わせてStyle.Triggersの設定を行うと、閲覧のみ可能な一覧が表示できます。

WPF】関連記事