是否启用WPF数据网格平移?

是否启用WPF数据网格平移?,wpf,wpf-controls,wpfdatagrid,Wpf,Wpf Controls,Wpfdatagrid,我有一个WPF数据网格,可以根据需要垂直扩展,因此不需要在数据网格本身中滚动或平移内容。但是,它位于具有ScrollViewer的窗口内 当我运行它时,DataGrid垂直增长以允许所有行按预期运行,并且窗口边缘的滚动条按预期显示。但我只能在数据网格之外的窗口区域上进行上下触摸/平移。DataGrid接受并有效地阻止输入(这并非意外) 那么,我如何使DataGrid向上“传递”这个触摸/平移输入到它的容器,即窗口,以便窗口知道它需要滚动?这里我可能错了,但我认为WPF中的视觉树向上冒泡。这意味着

我有一个WPF数据网格,可以根据需要垂直扩展,因此不需要在数据网格本身中滚动或平移内容。但是,它位于具有ScrollViewer的窗口内

当我运行它时,DataGrid垂直增长以允许所有行按预期运行,并且窗口边缘的滚动条按预期显示。但我只能在数据网格之外的窗口区域上进行上下触摸/平移。DataGrid接受并有效地阻止输入(这并非意外)


那么,我如何使DataGrid向上“传递”这个触摸/平移输入到它的容器,即窗口,以便窗口知道它需要滚动?

这里我可能错了,但我认为WPF中的视觉树向上冒泡。这意味着,正如我现在解释的那样,您的DataGrid将捕获事件并按照您所提到的正确处理它

但一旦完成,它会向其父级(窗口)冒泡,因此不会将事件传递给scrollviewer。之所以这样做,是因为scrollviewer中的datagrid可能是同级,而不是父/子关系

一个选项是设置一个命令来处理这种行为。 或者您可以使用dispatcher:

this.Dispatcher.Invoke( () => 
           control.ScrollToVerticalOffset(scrollViewerChannelBtns.VerticalOffset + 50);
在xaml中

ScrollViewer.PanningMode="Both"

ScrollViewer是窗口的子窗口。我知道这件事有点夸张。但我相信处理这类事件的控件的默认行为是让它们使用它,而不是转发给它们的父母。其他控件也是如此。通常情况下,这不是一个问题,但DataGrid太大了,当我触摸并拖动它时,我需要滚动窗口。我想我需要连接到正确的预览事件(从顶部向下),在数据网格上平移时触发该事件……但我甚至不知道平移使用的是什么事件,也找不到任何文档