【问题标题】:Adjust a scrollviewer's width dynamically动态调整滚动查看器的宽度
【发布时间】:2012-02-29 17:06:48
【问题描述】:

我正在创建一个 UI,其中心组件是一个滚动查看器,其中包含一个带有可变数量项目的堆栈面板。如果屏幕上没有足够的空间,左侧和右侧的按钮将允许使用滚动查看器单击堆栈面板。请注意,这些项目的大小都相同。

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

这工作正常。但是,我现在只需要显示完整/完整的项目。因此,如果堆栈面板中的项目多于我可以在屏幕上显示的数量,我不想出现右侧或左侧的部分项目。我只想让我的滚动按钮出现,表明有更多可用的项目。 因此,如果将子项添加到堆栈面板,则持有堆栈面板的滚动查看器应该查看屏幕上是否有足够的空间来显示所有项目。如果不是,它应该减小它的宽度,以便隐藏下一个(部分可见的)项目。

我的问题是:确定堆栈面板中的所有项目是否可以显示在屏幕上的最佳方法是什么。如果没有,我怎样才能实现隐藏可能显示的部分项目?

我已经根据 SizeChanged 事件玩弄了 Scrollviewer 本身的宽度,但我不确定这是否是实现此行为的最明智的方法。在初始化时确定滚动查看器的 MaxWidth 是否更好,相应地设置它并让它增长?

提前致谢, 好奇心

【问题讨论】:

  • 一个使实现这一目标更加复杂的问题是,一旦设置了滚动查看器,您就无法更改它的宽度。如果我尝试它根本不会显示。

标签: c# wpf scrollviewer


【解决方案1】:

我认为既然这是一个自定义的滚动查看器,那么您根本不需要使用默认的滚动查看器,而是使用您自己的基于堆栈面板的控件来显示项目。你甚至可以实现一个动画,这样当按下左或右按钮时,它会以一种很好的方式滚动。

【讨论】:

  • 这确实值得考虑。也许我只是放弃了滚动视图。我确实喜欢动画的想法。但是,目前看来,我们可能必须在项目上绘制一些内容,这些内容不会包含在其中,而是绘制在项目所在的屏幕位置上。我不确定在项目和绘制在它们上的附加层之间同步动画的可能性有多大。
猜你喜欢
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 2013-06-02
  • 2013-07-31
相关资源
最近更新 更多