2012-02-08 90 views
3

我正在创建一个UI的过程中,这是中心组件是一个scrollviewer持有一个可变数目的项目的stackpanel。如果屏幕上没有足够的空间,则左侧和右侧的按钮似乎允许使用滚动查看器单击堆栈面板。请注意,这些项目都是相同的大小。动态调整scrollviewer的宽度

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

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

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

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

由于提前, 好奇心

+0

实现此目标更复杂的一个问题是,一旦设置了滚动查看器,就无法更改其宽度。如果我尝试,它将不会显示。 – curiosity 2012-02-08 10:24:08

回答

1

我认为既然这是这样一个自定义的滚动浏览器,那么你并不需要在所有使用默认的ScrollViewer,而是使用自己控制的基础上的StackPanel是将显示这些项目。你甚至可以实现一个动画,这样当按下左或右按钮时,它会以很好的方式滚动。

+0

这确实值得一想。也许我只是抛弃了scrollview。我喜欢动画的想法。然而,目前看来,我们可能不得不在物品上绘制东西,这些东西不会包含在物品中,而是绘制在物品所在屏幕上的位置上。我不确定在项目和绘制在其上的附加层之间同步动画的可能性有多大。 – curiosity 2012-02-08 14:08:43