Могу ли я сделать WPF DataGridRow невыбираемым? - PullRequest
3 голосов
/ 25 августа 2011

У меня есть стиль в моей сетке данных, чтобы отключить DataGridRow на основе привязки свойства. Это делает строку невыбираемой, чего я и хочу. Тем не менее, я все еще могу выбрать отключенные строки, используя как минимум 2 других способа. Во-первых, если я использую движение перетаскивания между двумя включенными строками, которые окружают запрещенную строку. Во-вторых, если я нажму на кнопку «Выбрать все» в левом верхнем углу сетки данных. Есть ли способ сделать определенные строки полностью недоступными для выбора?

Это то, что у меня сейчас есть:

  <DataGrid.RowStyle>
      <Style TargetType="{x:Type DataGridRow}">
          <Style.Triggers>
              <DataTrigger Binding="{Binding DisableMe}" Value="True">
                  <Setter Property="IsEnabled" Value="False" />
              </DataTrigger>
          </Style.Triggers>
      </Style>
  </DataGrid.RowStyle>

Ответы [ 3 ]

1 голос
/ 15 ноября 2012

А как насчет использования события SelectionChanged для отмены выбора?Я действительно не думаю, что есть прямой путь к этому, во всяком случае.

Вы также можете изменить стиль строки, чтобы она выглядела невыбранной, даже если она выбрана, и отфильтровать ее выбор с помощью кода ...

0 голосов
/ 04 июля 2019

Я не думаю о каком-либо правильном решении этого вопроса. Но в качестве обходного пути вы можете привязать свойство IsHitTestVisible DataGrid к IsEnabled.

<DataGrid.RowStyle>
 <Style TargetType="{x:Type DataGridRow}">
    <Setter Property="IsEnabled" Value="True" />
    <Setter Property="IsHitTestVisible" Value="{Binding RelativeSource={RelativeSource   Self},Path=IsEnabled}"/>
          <Style.Triggers>
              <DataTrigger Binding="{Binding DisableMe}" Value="True">
                  <Setter Property="IsEnabled" Value="False" />
              </DataTrigger>
          </Style.Triggers>
      </Style>
    </DataGrid.RowStyle>
0 голосов
/ 18 августа 2015

Я только что наткнулся на этот поток с той же проблемой, и я хочу отметить, что вы можете просто установить enabled на false.

...