已更新 我有一个迟钝的要求,我正在努力完成与现有元素的合作,我正处于一个可以真正使用另一双眼睛的位置。
为了更快解释,有些伪;
<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&amp; InvalidateMeasure没有运气,我可能在这种情况下错误地使用了CallMethodAction吗?
答案 0 :(得分:1)
在外部网格中的第二个RowDefinition上设置VerticalAlignment="Top"
和没有Height
(或Height="*"
)应该有效:
<Grid VerticalAlignment="Top">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid Grid.Row="1" Visibility="Collapsed">
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition/>
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="1">
<ItemsControl/>
</ScrollViewer>
</Grid>
</Grid>