WPF анимация видимости на стек - PullRequest
6 голосов
/ 07 октября 2011

У меня есть панель стека с кнопкой, которая при нажатии заставляет панель стека исчезнуть. Я хочу анимировать форму перехода, видимую скрытой, но не смогла.

Я немного огляделся и наткнулся на что-то похожее на это:

<StackPanel Margin="80,60,60,80" Background="Gray">
    <StackPanel.Triggers >

        <EventTrigger  > 
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard TargetProperty="Visibility">

                        <DoubleAnimation Duration="0:0:5:0" From="Visible" To="Hidden"/>

                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>

    </StackPanel.Triggers>
    <Button Name="buttonTop" Content="TOP" Margin="40,40,40,40" Click="buttonTop_Click" Width="131" />
</StackPanel>

что, конечно, еще не 100%. Есть идеи?

Ответы [ 2 ]

10 голосов
/ 07 октября 2011

Вы можете использовать

<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ItemsHost"
                               Storyboard.TargetProperty="Visibility">
    <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>

Это в значительной степени сеттер в раскадровке, где KeyTime описывает время, когда должно быть установлено значение.Таким образом, полная раскадровка будет выглядеть так:

<BeginStoryboard>
    <Storyboard>
        <DoubleAnimation Storyboard.TargetProperty="Opacity"
                         To="0" Duration="0:0:5.0"/>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility">
            <DiscreteObjectKeyFrame KeyTime="0:0:5.0" Value="{x:Static Visibility.Hidden}"/>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</BeginStoryboard>

edit: Как заставить раскадровку срабатывать при нажатии кнопки:

<Button Content="Button" HorizontalAlignment="Left" Margin="337,221,0,0" VerticalAlignment="Top" Width="75">
    <Button.Triggers>
        <EventTrigger RoutedEvent="Button.Click">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetProperty="Opacity"
                 To="0" Duration="0:0:5.0"/>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility">
                        <DiscreteObjectKeyFrame KeyTime="0:0:5.0" Value="{x:Static Visibility.Hidden}"/>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Button.Triggers>
</Button>
4 голосов
/ 07 октября 2011

Visibiltiy - это дискретное значение - оно либо включено, либо выключено, поэтому анимация все равно приведет к внезапному исчезновению, а не к постепенному исчезновению.Вместо этого вы можете анимировать Opacity из StackPanel от 1 до 0, а затем анимировать Visibilty до Hidden (или Collapsed) после этого.

...