Использование ScrollIntoView в DataGrid с флажком изменяет поведение - PullRequest
0 голосов
/ 25 октября 2011

Кажется, у меня противоречивые требования.У меня есть DataGrid, который имеет флажок в качестве первого столбца.Пользователи хотят, чтобы флажок выбирался одним щелчком, а не двойным щелчком.Я смог добиться этого, используя DataGridTemplateColumn и флажок, подобный следующему:

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox  IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Пользователь также имеет элемент управления, который позволяет им указывать строку (может быть сотни строк).Если они указывают строку, которая не отображается, я хочу, чтобы она прокручивалась в поле зрения.Я скомпрометировал и добавил обработчик событий в коде для события DataGrid_SelectionChanged.Первоначально я просто использовал команду ScrollIntoView, но закадровые строки выделялись, но сетка не прокручивала их в поле зрения.Затем я смог добавить команду «Фокус» и строка прокручивалась в поле зрения.Итак, теперь обработчик событий выглядит следующим образом:

private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   DataGrid dg = (DataGrid)sender;
   if (dg.SelectedItem == null) return;
   dg.ScrollIntoView(dg.SelectedItem);
   dg.SelectedItem.Focus();
}

Теперь я возвращаюсь к исходной проблеме, строка прокручивается в поле зрения, но для проверки флажка в любой другой строке (что вы не перемещаетесь вчерез контроль перехода к строке) вы должны нажать дважды.Кто-нибудь знает, что заставляет строки, перемещаемые вручную, требовать двойного щелчка?

1 Ответ

0 голосов
/ 25 октября 2011

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

private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    DataGrid dg = (DataGrid)sender;
    if (dg.SelectedItem == null) return;
    dg.ScrollIntoView(dg.SelectedItem);

    DataGridRow dg_row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromItem(dg.SelectedItem);
    if (dg_row == null) return;
    dg_row.Focus();
    }
...