WPF DataGrid MouseLeftButtonUp - PullRequest
       6

WPF DataGrid MouseLeftButtonUp

0 голосов
/ 22 апреля 2020

У меня проблема с обнаружением ячейки, нажатой внутри DataGrid. DataGrid настроен как

<Setter Property="SelectionMode" Value="Single" />
<Setter Property="SelectionUnit" Value="Cell" />

Я использую DataGridTemplateColumns, и у каждого из них есть шаблон, который выглядит примерно так:

<DataGridTemplateColumn Header="...">
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <ContentPresenter Content="{Binding SomeProperty}"
                        ContentTemplate="{StaticResource CellTemplate}" />
    </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

<DataTemplate x:Key="CellTemplate">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="11" />
      <ColumnDefinition Width="11" />
      <ColumnDefinition Width="11" />
      <ColumnDefinition Width="11" />
    </Grid.ColumnDefinitions>

    <Border Grid.Column="0" ... />
    <Border Grid.Column="1" ... />
    <Border Grid.Column="2" ... />
    <Border Grid.Column="3" ... />
  </Grid>
</DataTemplate>

Обычно я могу получить в событии DataGrid MouseLeftButtonUp какую ячейку был нажат и его DataContext, либо через e.OriginalSource, либо через свойство dataGrid.SelectedCells.

Проблема возникает, когда пользователь каким-то образом нажимает кнопку «между ячейками», поэтому в e.OriginalSource сообщается о некотором ScrollViewer или даже DataGridRow. и dataGrid.SelectedCells пусто.

Я попытался удалить все границы вокруг ячеек, установив

<Setter Property="GridLinesVisibility" Value="None" />

Это мало что дало. Итак, есть ли способ, которым я всегда могу получить какую-нибудь ячейку, на которую нажали, или, по крайней мере, ближайшую возможную? Он не должен быть с точностью до 1 пикселя. Как и сейчас, похоже, что щелчки «проглатываются» всякий раз, когда вызывается MouseLeftButtonUp, а SelectedCells пуст, хотя у пользователя есть ощущение, что он щелкает в «области данных».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...