c# WPF DataGrid ScrollIntoView不支持触摸
本文关键字:不支持 触摸 ScrollIntoView DataGrid WPF | 更新日期: 2023-09-27 18:07:05
我尝试在Loaded
事件上滚动到WPF DataGrid
中的最后一个选定项目。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);
}
}
我也试过我在这里找到的解决方案,但它不起作用。
编辑:出于测试目的,我完全删除了dataGrid_Loaded
事件。现在我只在程序开始时将数据加载到DataGrid
中。即使现在,当我用鼠标单击切换选项卡时,它也会保持滚动位置,但不使用触摸!这是。net框架中的一个bug吗?
在MSDN社区的帮助下,我能够解决这个问题。
我必须滚动到DataGrid
的末尾,做UpdateLayout()
,然后滚动到我想要的Item
。此外,我不能每次都设置ItemsSource
,因为这样我之前保存的Item
就不再是DataGrid
的有效Item
了。
最后我的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);
}
}
我希望这能帮助到有同样问题的人。
作为参考,这里是我的德国MSDN线程,我的问题解决了。