我尝试滚动到DataGrid
事件的WPF Loaded
中的最后一个选定项目。 DataGrid
位于Tab
。当我在普通的Windows环境中测试时,一切正常。但是,只要我在平板电脑上触摸 TabPage而不是点击它,它就不会滚动到我上次选择的项目。
到目前为止,这是我的代码:
private void dataGrid_Loaded(object sender, RoutedEventArgs e)
{
var currentItem = dataGrid.SelectedItem;
dataGrid.ItemsSource = sh.GetDataTable(<SQL Select statement>).DefaultView;
if (!(currentItem == null))
{
dataGrid.ScrollIntoView(currentItem);
}
}
我也尝试过我找到here的解决方案,但它没有用。
修改
出于测试目的,我完全删除了dataGrid_Loaded
事件。现在我只在程序开始时将数据加载到DataGrid
。即使是现在,当我使用鼠标点击切换选项卡时,它会保持滚动位置,但不会使用触摸!这是.NET Framework中的错误吗?
答案 0 :(得分:2)
在MSDN社区的帮助下,我能够解决问题。
我必须滚动到DataGrid
的末尾,执行UpdateLayout()
,然后滚动到我想要的Item
。
另外,我不能每次都设置ItemsSource
,因为我之前保存的Item
不再是Item
的有效DataGrid
。
所以最后我的dataGrid_Loaded
方法看起来像这样:
private void dataGrid_Loaded(object sender, RoutedEventArgs e)
{
object currentPos = dataGrid.SelectedItem;
if (dataGrid.ItemsSource == null)
{
dataGrid.ItemsSource = sh.GetDataTable("<SQL query>").DefaultView;
}
else
{
dataGrid.Items.Refresh();
}
if (currentPos != null)
{
dataGrid.ScrollIntoView(dataGrid.Items[dataGrid.Items.Count - 1]);
dataGrid.UpdateLayout();
dataGrid.ScrollIntoView(currentPos);
}
}
我希望这可以帮助那些遇到同样问题的人。
供参考here是我的德语MSDN主题,我的问题已解决。