Layout 布局面板内的内容不滚动

Layout 布局面板内的内容不滚动,layout,uwp,scrollview,uwp-xaml,Layout,Uwp,Scrollview,Uwp Xaml,假设我有一个简单的Windows10UWP应用程序 大量ListView项目导致其溢出并滚动,如预期的那样: 但是,如果我需要添加另一个控件作为ListView的同级控件,就像这样(为了简单起见,将网格替换为StackPanel) ... 然后滚动条消失,列表视图不再可滚动。内容只是从窗口底部剪下/切掉 这里发生了什么?我如何使它再次滚动?关键是。ListView和GridView之所以可以滚动,首先是因为它们内置了ScrollViewer 将ListView放置在父布局面板(例如St

假设我有一个简单的Windows10UWP应用程序


大量ListView项目导致其溢出并滚动,如预期的那样:

但是,如果我需要添加另一个控件作为ListView的同级控件,就像这样(为了简单起见,将网格替换为StackPanel)


...
然后滚动条消失,列表视图不再可滚动。内容只是从窗口底部剪下/切掉

这里发生了什么?我如何使它再次滚动?

关键是。ListView和GridView之所以可以滚动,首先是因为它们内置了ScrollViewer

将ListView放置在父布局面板(例如StackPanel或网格行)内时,如果ListView高度大于视口,则父面板将成为ListView的完整高度。但是StackPanel没有实现ScrollViewer,因此它无法滚动,最终导致StackPanel从视口的底部边缘延伸

解决方法很简单:将有问题的父布局面板放在ScrollViewer中


...

这一点的关键在于。ListView和GridView之所以可以滚动,首先是因为它们内置了ScrollViewer

将ListView放置在父布局面板(例如StackPanel或网格行)内时,如果ListView高度大于视口,则父面板将成为ListView的完整高度。但是StackPanel没有实现ScrollViewer,因此它无法滚动,最终导致StackPanel从视口的底部边缘延伸

解决方法很简单:将有问题的父布局面板放在ScrollViewer中


...


将为binaryfunt的答案添加更多上下文:这取决于您使用的面板的布局逻辑

要事先注意:
ListView
默认情况下内部有自己的
ScrollViewer

在布置子网格时,
网格
通常会告诉其子网格应该适合网格的边界。对于
列表视图
,它很乐意这样做,并且它自己的内部
滚动查看器
处理它的子滚动

另一方面,
StackPanel
告诉它的子对象,它们在堆叠方向上有几乎无限的空间来布局-因此您的
ListView
不知道它必须将自身约束到
StackPanel
的高度,因为
StackPanel
没有告诉它这样做,因此ListView不需要这样做使用它自己的
ScrollViewer
,因为它认为它有无限的空间

现在,将
StackPanel
放在
ScrollViewer
中本身没有帮助-如果你将
ScrollViewer
放在
StackPanel
中,你会遇到与
ListView
相同的问题-它认为它有无限的空间,因此永远不需要滚动它的内容。但是,将
ScrollViewer
放在
网格中,网格将为ScrollViewer提供一个定义的布局大小,因此
ScrollViewer
中的任何内容如果太大,现在都将滚动

列表视图
放入此
堆栈面板
滚动查看器
ListView
仍然认为它有无限的空间,因此永远不需要使用自己的滚动条,但它也禁用了
ListView
通常具有的虚拟化和性能增强功能,因为它们依赖于它的内部
ScrollViewer
实际上被过度使用


(binaryfunt的XAML答案将起作用。)

将为binaryfunt的答案添加更多上下文:这取决于您正在使用的面板的布局逻辑

要事先注意:
ListView
默认情况下内部有自己的
ScrollViewer

在布置子网格时,
网格
通常会告诉其子网格应该适合网格的边界。对于
列表视图
,它很乐意这样做,并且它自己的内部
滚动查看器
处理它的子滚动

另一方面,
StackPanel
告诉它的子对象,它们在堆叠方向上有几乎无限的空间来布局-因此您的
ListView
不知道它必须将自身约束到
StackPanel
的高度,因为
StackPanel
没有告诉它这样做,因此ListView不需要这样做使用它自己的
ScrollViewer
,因为它认为它有无限的空间

现在,将
StackPanel
放在
ScrollViewer
中本身没有帮助-如果你将
ScrollViewer
放在
StackPanel
中,你会遇到与
ListView
相同的问题-它认为它有无限的空间,因此永远不需要滚动它的内容。但是,将
ScrollViewer
放在
网格中,网格将为ScrollViewer提供一个定义的布局大小,因此
ScrollViewer
中的任何内容如果太大,现在都将滚动

列表视图
放入此
堆栈面板
滚动查看器
ListView
仍然认为它有无限的空间,因此永远不需要使用自己的滚动条,但它也是