该问题来自社区帖: https://bbs.csdn.net/topics/617173608.为符合问答规范, 该问题经过ChatGPT优化
<html><body>
<html><body>
在 WPF 中的 DataGrid 中,如何取消滚动条自动滚动,当用户点击单元格时。
</body></html>在 WPF 中的 DataGrid 中,如何取消滚动条自动滚动,当用户点击单元格时。
</body></html>引用 皆我百晓生 小程序回复内容作答:
要取消 DataGrid 中滚动条的自动滚动行为,可以使用以下代码:
首先,在 DataGrid 的 Loaded 事件中添加以下代码:
private void dataGrid_Loaded(object sender, RoutedEventArgs e)
{
ScrollViewer scrollViewer = GetVisualChild<ScrollViewer>(dataGrid);
scrollViewer.PreviewMouseWheel += ScrollViewer_PreviewMouseWheel;
}
private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
ScrollViewer scrollViewer = (ScrollViewer)sender;
if (scrollViewer.IsMouseOver)
{
e.Handled = true;
}
}
private static T GetVisualChild<T>(DependencyObject parent) where T : Visual
{
T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)
{
Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
child = v as T;
if (child == null)
{
child = GetVisualChild<T>(v);
}
if (child != null)
{
break;
}
}
return child;
}
这里定义了一个 GetVisualChild 方法,它可以在可视化树中查找指定类型的子元素。
然后在 ScrollViewer 的 PreviewMouseWheel 事件中,将 e.Handled 设置为 true,以阻止自动滚动。
最后,在 XAML 文件中添加以下代码,将 dataGrid_Loaded 事件绑定到 DataGrid 的 Loaded 事件:
<DataGrid x:Name="dataGrid" Loaded="dataGrid_Loaded">
<!-- DataGrid 的定义 -->
</DataGrid>
这样,当用户点击 DataGrid 的单元格时,滚动条就不会自动滚动了。