0

我有一个包含内部网格的按钮:

    <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 以仅显示第一行中的文本。这部分工作正常。当我再次单击折叠的 Button 时,会发生奇怪的行为:它展开回其初始大小(两行可见),然后再次折叠到一行高度。似乎 Grid 的 ActualHeight 在动画期间和动画完成后保持不变。

所以我有两个问题:

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

2)如果我为第二行设置 Height="*",我可以实现所需的行为。为什么在这种情况下 Grid 的 ActualHeight 会改变?

任何信息,将不胜感激。

4

1 回答 1

1

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

使用 Height="*" 它可以工作,因为网格的大小至少是第一个 TextBlock 的大小。但是,如果您将其设置为 0,您将看到相同的行为。

于 2014-04-15T14:50:21.350 回答