WPF:网格的实际高度未更改



我有一个按钮,里面有一个网格:

    <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>

单击按钮时,应折叠网格以仅显示第一行中的文本。这部分工作正常。当我再次单击折叠按钮时,会发生奇怪的行为:它会扩展回初始大小(两行可见),然后再次折叠到一行高。在动画过程中和动画完成后,栅格的实际高度似乎保持不变。

所以我有两个问题:

1) 为什么网格的实际高度没有改变,尽管在视觉上网格的大小已经改变了。

2) 如果我为第二行设置Height="*",我可以实现所需的行为。在这种情况下,为什么要更改网格的实际高度?

如有任何信息,我们将不胜感激。

在将行高度设置为自动的设置中,网格的实际高度将至少为TextBlocks高度的总和。因此,当将其设置为较小的值时,ActualHeight不会更改,但要渲染的栅格的大小是使用Height属性设置的。实际上,您看到的是正在剪裁的网格,而不是调整大小。

当Height="*"时,它之所以有效,是因为网格的大小至少只有第一个TextBlock的大小。但是,如果将其设置为0,则会出现相同的行为。

最新更新