Wpf - 自下而上的动画高度

时间:2011-06-30 13:08:40

标签: wpf xaml animation

我正在尝试为Skypes通知创建类似的东西,但是我对动画有一些问题。

我希望整个窗口的顶部和底部都有边框,然后中间的内容会用它来“推”边框。 我已经设法创造出几乎可以满足我想要的东西,但它从顶部向下生长,我希望它能够推动底部边框文具。

我在中间部分使用以下动画我想出现

<DoubleAnimation 
     Storyboard.TargetName="contentGrid" 
     BeginTime="00:00:0.2" 
     Storyboard.TargetProperty="(FrameworkElement.Height)" 
     From="0" 
     Duration="0:0:0.5"/>

任何想法? 感谢

XAMl的其余部分:

<Grid Name="notificationPanel">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>        
    <Grid.Triggers>
        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="contentGrid" Storyboard.TargetProperty="(FrameworkElement.Height)" From="0" Duration="0:0:0.5"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Grid.Triggers>

    <Grid Grid.Row="0" Background="CornflowerBlue">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>

        <TextBlock Name="notificationTitle" Padding="5" FontSize="14" Foreground="White">
            Call Manager - Incoming Call
        </TextBlock>

        <Path Name="closeButton"  Grid.Column="1" Margin="5,10,10,0" Fill="White" Data="F1 M 2.28484e-007,1.33331L 1.33333,0L 4.00001,2.66669L 6.66667,6.10352e-005L 8,1.33331L 5.33334,4L 8,6.66669L 6.66667,8L 4,5.33331L 1.33333,8L 1.086e-007,6.66669L 2.66667,4L 2.28484e-007,1.33331 Z " />
    </Grid>

    <Grid Name="contentGrid" Grid.Row="1" Background="White" Height="15" VerticalAlignment="Bottom" >  
    </Grid>

    <Rectangle Grid.Row="2" Fill="CornflowerBlue" Height="5" />
</Grid>

2 个答案:

答案 0 :(得分:6)

您所看到的行为正由包含<Grid Name="notificationPanel">网格的UIElement决定。

如果此网格放置在高度设置为“自动”的元素内,它将从上到下动画,这不是您想要的。

如果此网格放置在具有固定高度或高度设置为*的容器内,并且您已将'notificationPanel'网格的VerticalAlignment设置为'Bottom',那么您将获得正确的动画行为,随着你的'contentGrid'成长并推高顶部边框,而底部边框保持静止。

关于WPF的其中一件事花了我很长时间才学习:)包含元素通常控制其子元素的行为和/或外观。

答案 1 :(得分:1)

我没有完全明白你的问题,但我从你的问题中理解的是,你现在能够将contentGrid的高度设置为0到15,这是从下到上的,你想要从上到下也是如此,你可以尝试以下代码

<DoubleAnimation    Storyboard.TargetName="contentGrid"
                    Storyboard.TargetProperty="(FrameworkElement.Height)" 
                    To="0" 
                    Duration="0:0:0.5"/>

如果要将高度设置为0到15并返回0,也可以尝试AutoReverse =“True”。

如果您在此答案中有其他想法,请更清楚地解释您的问题。