Другой способ сделать это (очень простой пример):
xaml:
<Grid x:Name="LayoutRoot">
<data:DataGrid x:Name="dg" Height="100">
<ScrollViewer.VerticalScrollBarVisibility>true</ScrollViewer.VerticalScrollBarVisibility>
</data:DataGrid>
CS:
public partial class MainPage : UserControl
{
IList<Person> list = new List<Person>();
public MainPage()
{
InitializeComponent();
list.Add(new Person("Pieter1","Nijs"));
list.Add(new Person("Pieter2", "Nijs"));
list.Add(new Person("Pieter3", "Nijs"));
list.Add(new Person("Pieter4", "Nijs"));
list.Add(new Person("Pieter5", "Nijs"));
list.Add(new Person("Pieter6", "Nijs"));
list.Add(new Person("Pieter7", "Nijs"));
list.Add(new Person("Pieter8", "Nijs"));
dg.ItemsSource = list;
dg.MouseWheel += new MouseWheelEventHandler(dg_MouseWheel);
}
void dg_MouseWheel(object sender, MouseWheelEventArgs e)
{
if (e.Delta < 0)
{
dg.ScrollIntoView(list[dg.SelectedIndex + 2], null);
}
else
{
dg.ScrollIntoView(list[dg.SelectedIndex - 2], null);
}
}
}
Итак, что я здесь делаю, очень просто!
Я добавляю EventHandler к событию DataGrid MouseWheel
. В этом обработчике я получаю e.Delta
(это количество, которое колесо изменило с прошлого раза), поэтому я знаю, прокручивал ли пользователь вверх (положительная дельта) или вниз (отрицательная дельта). И тогда я вызываю ScrollIntoView
-метод DataGrid, где я могу указать, к какой строке должна быть прокрутка Grid.
Как уже упоминалось, это очень простой пример! Это просто чтобы показать вам, как это может работать! Вы должны добавить дополнительную логику, чтобы убедиться, что вы не выходите из отказов!