C# WPF DataGrid ScrollIntoView 无法使用触摸
C# WPF DataGrid ScrollIntoView not working with touch
我尝试在 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
中。即使现在,当我使用鼠标 clicks 而不是 touch 在选项卡之间切换时,它仍保持滚动位置!这是 .NET Framework 中的错误吗?
在 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);
}
}
我希望这对遇到同样问题的其他人有所帮助。
供参考 here 是我的德语 MSDN 线程,我的问题已在其中解决。
我尝试在 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
中。即使现在,当我使用鼠标 clicks 而不是 touch 在选项卡之间切换时,它仍保持滚动位置!这是 .NET Framework 中的错误吗?
在 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);
}
}
我希望这对遇到同样问题的其他人有所帮助。
供参考 here 是我的德语 MSDN 线程,我的问题已在其中解决。