【发布时间】:2013-12-16 17:50:09
【问题描述】:
更新 我有一个迟钝的要求,我正在尝试使用现有元素来满足我的需求,而且我真的可以使用另一双眼睛。
为了更快的解释,一些伪;
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid/>
<Grid Grid.Row="1"/>
<Grid Grid.Row="2"/>
<Grid Grid.Row="3" Visibility="Collapsed">
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="1">
<ItemsControl/>
</ScrollViewer/>
</Grid>
</Grid>
所以我们这里有一个父 Grid 和一个子 Grid,其可见性被切换。当前,父行设置了自动高度,因此当子行消失时,该行将折叠。
最初,只有一个 MaxHeight 设置在子级上,当它可见时调用 ScrollViewer 滚动条就好了。除了我需要放弃MaxHeight 并让它占用它所有可用/需要的空间,同时在大小更改时调用ScrollViewer 上的滚动条。我还应该提到,如果可以的话,我正在尝试在不使用任何代码的情况下在 XAML 中完成这一切。
我尝试将EventTrigger 绑定到SizeChanged 并尝试Loaded 并让它执行CallMethodAction 以执行UpdateLayout 希望它会重新绘制/测量ScrollViewer 以调用滚动条,如果这是必需的。然而没有喜悦...
类似这样的东西附在ScrollViewer;
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<ei:CallMethodAction MethodName="UpdateLayout"/>
</i:EventTrigger>
</i:Interaction.Triggers>
我希望比我睡得更多的人能对我的愚蠢或我忘记了什么提供一些见解?似乎这样的事情应该有效。
我需要做的就是仍然尊重Visibility 更改并允许父行折叠,但是当它是可见的并且需要它时仍然调用滚动条。有什么技巧吗?
PS - 我也在尝试 InvalidateArrange 和 InvalidateMeasure 但没有运气,我可能在这种情况下错误地使用了 CallMethodAction 吗?
【问题讨论】:
-
您不能从外部网格的第二行中删除
Height="Auto"设置吗?这将使该行完全填充可用空间并自动切换滚动条。 -
@Clemens 然后当填充它的内容被折叠时,它会保持原来的大小,留下一个漂亮的大空白空间。不幸的是,尝试了许多不同的方法。
-
好的,如果您还在外部网格上设置
VerticalAlignment="Top",它应该可以工作。
标签: silverlight xaml layout silverlight-4.0 scrollbar