Вам нужно установить высоту на внутреннем ScrollViewer, иначе он будет растягиваться столько, сколько нужно, в зависимости от размера его контента.
<Window x:Name="RootWindow">
<ScrollViewer>
<Grid Height="{Binding ElementName=RootWindow, Path=ActualHeight}">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="2*" />
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="1">
<DataGrid />
</ScrollViewer>
</Grid>
</ScrollViewer>
</Window>
Кроме того, DataGrid имеет встроенные свойства для своих собственных полос прокрутки, которые вы можете использовать вместо переноса DataGrid в ScrollViewer. Это прокручивает данные и всегда оставляет заголовки видимыми, а не прокручивает всю сетку данных.
<DataGrid HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto" />