WPF-анимировать высоту снизу вверх

Я пытаюсь создать что-то похожее по стилю на уведомления 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 ответов


поведение, которое вы видите, определяется UIElement, который содержит ваш <Grid Name="notificationPanel"> решетки.

Если эта сетка помещена внутри элемента с высотой, установленной в "авто", она будет анимироваться сверху вниз, что не то, что вы хотите.

Если эта сетка помещена внутри контейнера с фиксированной высотой или высотой, установленной на*, и вы установили вертикальное выравнивание вашей сетки "notificationPanel" на "дно", то вы получите правильную анимацию поведение, когда ваш "contentGrid" растет и подталкивает верхнюю границу, в то время как нижняя граница остается неподвижной.

Это одна из тех вещей о WPF, которые заняли у меня много времени, чтобы узнать :) содержащий элемент часто контролирует поведение и/или внешний вид его дочерних элементов.


Я не получил ваш вопрос точно, но то, что я понял из вашего вопроса, в настоящее время вы можете анимировать высоту contentGrid от 0 до 15, которая снизу вверх, и вы хотите сделать ее сверху вниз, чтобы вы могли попробовать следующий код

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

вы также можете попробовать AutoReverse= "True", если хотите анимировать высоту от 0 до 15 и обратно до 0.

если что-то еще вы ожидаете в этом ответе объясните, пожалуйста, вы более четко вопрос.