动态调整滚动视图控件的宽度

3

我正在创建一个UI界面,其中心组件是一个scrollviewer,它包含一个可变数量的item的stackpanel。如果屏幕上没有足够的空间,左右两侧会出现按钮,通过scrollviewer来浏览stackpanel中的item。需要注意的是,所有的item大小都相同。

<Grid.ColumnDefinitions>
   <ColumnDefinition x:Name="LeftButton" Width="Auto"/>
   <ColumnDefinition x:Name="Content" Width="*"/>
   <ColumnDefinition x:Name="RightButton" Width="Auto"/>
</Grid.ColumnDefinitions>

这个功能目前可以正常工作。但是,现在要求只显示完整的项目。因此,如果StackPanel中有更多的项,而屏幕上无法全部显示,则不希望右侧或左侧出现部分项。我只想让滚动条出现,表示有更多的可用项。
因此,如果向StackPanel添加子项,包含StackPanel的ScrollViewer应检查屏幕上是否有足够的空间来显示所有项。如果没有,则应减小其宽度,以隐藏下一个(部分可见)项。
我的问题是:确定StackPanel中的所有项目是否可以在屏幕上显示的最佳方法是什么?如果不能,如何实现隐藏部分项?
我已经尝试了调整ScrollViewer自身的宽度,并依赖于SizeChanged事件,但我不确定这是否是实现此行为的最明智方法。最好在初始化时确定scrollviewer的MaxWidth,设置它,然后让它增长吗?
谢谢, 好奇心

进一步复杂化实现这个目标的问题是,一旦设置了ScrollViewer的宽度,就无法更改它。如果我试图更改它,它将完全不显示。 - curiosity
1个回答

1

我认为既然这是一个定制化的滚动视图,那么你根本不需要使用默认的滚动视图,而是使用基于StackPanel的自己的控件来显示项目。你甚至可以实现一个动画效果,使得在按下左右按钮时,它会以一种漂亮的方式滚动。


这确实值得考虑。也许我应该完全放弃滚动视图。我确实喜欢动画的想法。然而,目前看来,我们可能需要在项目上绘制一些东西,这些东西不会包含在它们内部,而是绘制在它们所在屏幕位置上。我不确定在多大程度上可以在项目和附加层之间同步动画。 - curiosity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接