我有一个按钮,里面有一个网格:
<Button>
<Grid Name="grid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Name="txt0" Grid.Row="0" Text="Text0"/>
<TextBlock Name="txt1" Grid.Row="1" Text="Text1"/>
</Grid>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="grid"
Storyboard.TargetProperty="Height"
From="{Binding ElementName=grid, Path=ActualHeight}"
To="{Binding ElementName=txt0, Path=ActualHeight}"
Duration="0:0:1"
FillBehavior="HoldEnd"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Button.Triggers>
</Button>单击Button时,应当折叠Grid,使其只显示第一行中的文本。这部分工作正常。当我再次单击折叠按钮时,会发生奇怪的行为:它会扩展回初始大小(两行可见),然后再折叠到一行高度。在动画期间和动画完成后,网格的ActualHeight似乎保持不变。
所以我有两个问题:
1)为什么网格的ActualHeight没有改变,尽管视觉网格的大小发生了变化。
2)如果为第二行设置Height="*“,则可以实现期望的行为。在这种情况下,网格的ActualHeight为什么会改变呢?
如有任何资料,将不胜感激。
发布于 2014-04-15 14:50:21
在设置行高度为自动的设置中,网格的ActualHeight将至少是TextBlocks的高度之和。因此,当您将动画设置为一个较小的值时,ActualHeight不会改变,但是要呈现的网格的大小是用高度属性设置的。实际上,您看到的是网格正在被裁剪,而不是调整大小。
对于Height="*“,它可以工作,因为网格的大小至少只有第一个TextBlock的大小。但是,如果您将其动画为0,您将使用相同的行为。
https://stackoverflow.com/questions/23086302
复制相似问题