Code Bye

WPF DataGrid嵌套在ScrollViewer中,如何滚动

 

ScrollViewer里有很多内容,其中有一个DataGrid 。DataGrid的垂直滚动条被设置为禁止出现,DataGrid也没用设置固定高度,这样当项添加的时候,其Height就会随着增加。现在,出现一个这样的问题:当DataGrid的项足够多,使得外层的ScrollViewer出现了垂直滚动条,但是鼠标放在DataGrid上滚动时,外层的ScrollViewer的滚动条不滚动。
请问:
1:默认的DataGrid 到底是作了怎样的处理,使得鼠标放在其上面滚动,外层的滚动条就不滚动呢?
2:像上面这种情况,如何处理,才能让外层的ScrollViewer滚动呢?


50分
我看是这样
滚动的事件被DataGrid收到后,它没有处理,并且阻止了事件向上冒泡.
如果你要处理, 可以自己处理那个ScrollViewer的事件 PreviewMouseWheel在这里做滚动条事件处理 

20分
1、系统自动处理,不需要知道。
2、你想什么条件下里面的滚动,什么条件下外面的滚动?
引用 3 楼 tanta 的回复:

1、系统自动处理,不需要知道。
2、你想什么条件下里面的滚动,什么条件下外面的滚动?

里面的DataGrid的垂直滚动条被设置为禁止出现,所以,里面的DataGrid是一直都不希望滚动的。
只有外面的ScrollViewer滚动


15分
本身 你描述的都有问题。
什么叫  “当DataGrid的项足够多”  这难道不是它的高度达到和外层的ScrollViewer一样吗??你不设置 DataGrid的高度,它永远都不会出现滚动条。

还有DataGrid 做了咋么样的处理,你如果重写过它的样式,你就会知道,其它也内嵌ScrollViewer,不然它怎么滚动。

引用 5 楼 duanzi_peng 的回复:

本身 你描述的都有问题。
什么叫  “当DataGrid的项足够多”  这难道不是它的高度达到和外层的ScrollViewer一样吗??你不设置 DataGrid的高度,它永远都不会出现滚动条。

还有DataGrid 做了咋么样的处理,你如果重写过它的样式,你就会知道,其它也内嵌ScrollViewer,不然它怎么滚动。

外层ScrollViewer的尺寸超过其容器的时候,就会出现滚动条。我不明白你说的是什么


10分
外层加ScrollViewer。为ScrollViewer设置高度和宽度。可自行设置横竖滚动条是否出现。一般设置为Auto

5分
引用 6 楼 sfd3rr 的回复:
Quote: 引用 5 楼 duanzi_peng 的回复:

本身 你描述的都有问题。
什么叫  “当DataGrid的项足够多”  这难道不是它的高度达到和外层的ScrollViewer一样吗??你不设置 DataGrid的高度,它永远都不会出现滚动条。

还有DataGrid 做了咋么样的处理,你如果重写过它的样式,你就会知道,其它也内嵌ScrollViewer,不然它怎么滚动。

外层ScrollViewer的尺寸超过其容器的时候,就会出现滚动条。我不明白你说的是什么

设置 DataGrid的高度。

private void lstItem_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
        {
            var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
            //指定路由事件对UIElement的事件类型
            eventArg.RoutedEvent = UIElement.MouseWheelEvent;
            eventArg.Source = Parent;
            //指定路由事件的源对象
            (Parent as UIElement).RaiseEvent(eventArg);
        }

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明WPF DataGrid嵌套在ScrollViewer中,如何滚动