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