【发布时间】:2021-05-30 11:10:59
【问题描述】:
这个想法是在一个可滚动的列表视图中拥有一个包含大量元素的列,以及一个包含小细节的第二列(不可滚动)。问题是整个页面都在滚动,因此第二列不在视图中。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Scrollviewer x:Name="scrollviewer" Grid.Column="0">
<Listview ItemsSource={...} ItemTemplate={...} />
</Scrollviewer>
<StackPanel Grid.Column="1">
<...>
</StackPanel>
</Grid>
我尝试使用 SizeChanged 事件 (scrollviewer.Height = Window.Current.Bounds.Height) 将窗口高度链接到滚动查看器高度,它可以正常工作,直到我滚动一点,然后它因错误“检测到布局周期”而崩溃。
我认为这应该是非常常见的情况,我在这里遗漏了一些东西。有人可以帮忙吗?
【问题讨论】:
-
不检查,设置行定义,因为通常网格将占用所有可用空间,因此列将始终扩展到内容大小,您必须通过查看 Heigh="*" 或静态值来分隔
-
仅供参考,通常不要将 ListView 放在 ScrollViewer 中。它破坏了 ListView 执行的性能处理,并可能导致大量布局成本。 ListView 包含它自己的内部 ScrollViewer,因此默认滚动而无需您指定任何内容。
-
设置行定义并没有帮助,Heigh="*" 整个页面仍在滚动,静态值有效,但我想要一列填充整个窗口高度。如果我在 OnSizeChanged 事件后面的代码中将值设置为窗口高度,快速调整窗口大小会使应用程序崩溃。
-
@user2814036 为什么在
ScrollViewer中使用ListView?ListView本身已经有ScrollViewer。此外,我复制了您的 XAML,在您的StackPanel中添加了一个TextBlock并添加了一些填充文本,并添加了一个用 500 个项目填充ListView的方法。我无法重现您的问题。 -
@Leander 我添加了 gif 我的页面是如何滚动的。我知道 Listview 有自己的滚动查看器我都试过了,不管有没有它我都不能只滚动左列。
标签: c# windows xaml uwp scrollviewer