Я нашел решение этого вопроса. Проблема заключается в DateGrid, а не в RowDetails, поэтому это также относится ко всем DataGrids в ScrollViewers.
Первый способ сделать это: IsHitTestVisible
- false
. Затем DataGrid будет игнорироваться курсором и не будет блокировать прокрутку. Недостатком этого является то, что курсор полностью игнорируется, поэтому вы больше не можете щелкнуть по вещам в DataGrid. Поскольку это, как правило, необходимо, а также для моего случая это не является отличным решением.
Итак, второй и лучший способ - уловить событие прокрутки на внутреннем DataGrid и передать его внешнему DataGrid или тому, что должно прокручиваться. Мы можем сделать это с помощью события PreviewMouseWheel
события DataGrid. Тогда можно прокручивать внешнюю ScrollViewer так:
ScrollViewer.ScrollToVerticalOffset(ScrollViewer.ContentVerticalOffset - e.Delta);
Найдено здесь: DataGrids over ScrollViewer prevent it to scroll
Если внешнее управление является DataGrid мы сначала должны получить его ScrollViewer как это:
private static ScrollViewer GetScrollbar(DependencyObject dep)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dep); i++)
{
var child = VisualTreeHelper.GetChild(dep, i);
if (child != null && child is ScrollViewer)
return child as ScrollViewer;
else
{
ScrollViewer sub = GetScrollbar(child);
if (sub != null)
return sub;
}
}
return null;
}
ScrollViewer scrollView = GetScrollbar(myDataGrid);
код от: http://blog.kervinramen.com/2010/10/wpf-datagrid-controlling-scrollbar.html
Если у внутреннего DataGrid есть контент, который можно прокручивать, нам нужно добавить условие для прохождения по прокрутке ng, вот так:
if (e.Delta > 0 && sv.VerticalOffset == 0 || e.Delta < 0 &&
ScrollViewer.VerticalOffset == ScrollViewer.ScrollableHeight)
После этого DataGrid будет вести себя как TextBox. Если курсор окажется над ним, он будет прокручиваться, пока он не достигнет дна. Затем он пройдет прокрутку к внешнему управлению и позволит ему прокручиваться. То же самое для прокрутки.
Также e.Delta всегда будет 120 или -120. Проверьте, как это относится к вашему приложению. Мне пришлось разделить его на 2,5, чтобы получить ту же прокрутку, что и внешний DataGrid.