Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF可见性动画触发问题_Wpf_Animation - Fatal编程技术网

WPF可见性动画触发问题

WPF可见性动画触发问题,wpf,animation,Wpf,Animation,我有两个StackPanel,其中第二个面板是额外的信息,可以在单击按钮时向下滑动并显示(如jQuerys slideDown效果)。然后,当再次单击按钮时,会向上滑动 我以前从未摆弄过动画,但一直在做一些研究。不过我还是很困惑,不能解决这个简单的问题 当我只监听Visibility=Visible属性时,它可以正常工作。但是,当我还想将面板向上滑动时,它的行为会很奇怪 这是我的XAML代码: <Grid> <Grid.RowDefinition

我有两个StackPanel,其中第二个面板是额外的信息,可以在单击按钮时向下滑动并显示(如jQuerys slideDown效果)。然后,当再次单击按钮时,会向上滑动

我以前从未摆弄过动画,但一直在做一些研究。不过我还是很困惑,不能解决这个简单的问题

当我只监听Visibility=Visible属性时,它可以正常工作。但是,当我还想将面板向上滑动时,它的行为会很奇怪

这是我的XAML代码:

<Grid>
                <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>

                    <StackPanel Grid.Row="0" Width="600" Orientation="Horizontal">
                        <TextBlock Style="{StaticResource Heading4}">Panel 1</TextBlock>
                        <Button Width="300" Margin="30,0,0,0" Click="Button_OnClick">Click to slide other panel down</Button>
                    </StackPanel>

                    <StackPanel Name="StackPanelShowHide" Grid.Row="1" Width="500" Orientation="Vertical" Background="Beige" Height="70">
                        <StackPanel.Style>
                            <Style TargetType="StackPanel">
                                <Style.Triggers>
                                    <Trigger Property="Visibility"  Value="Visible">
                                        <Trigger.EnterActions>
                                            <BeginStoryboard>
                                                <Storyboard>
                                                    <DoubleAnimation Storyboard.TargetProperty="Height" From="0" To="70" Duration="0:0:1" />
                                                </Storyboard>
                                            </BeginStoryboard>
                                        </Trigger.EnterActions>
                                    </Trigger>
                                    <Trigger Property="Visibility"  Value="Collapsed">
                                        <Trigger.EnterActions>
                                            <BeginStoryboard>
                                                <Storyboard>
                                                    <DoubleAnimation Storyboard.TargetProperty="Height" From="70" To="0" Duration="0:0:1" />
                                                </Storyboard>
                                            </BeginStoryboard>
                                        </Trigger.EnterActions>   
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </StackPanel.Style>
                        <TextBlock Style="{StaticResource Heading4}">New panel</TextBlock>

                    </StackPanel>

                </Grid>
真的希望你能帮忙:)

亲切问候,,
Lars

我认为您的问题是当
堆栈面板
可见性
值为
折叠
时,它会从UI中删除。因此,即使出现
动画
,您也看不到它。

我猜它不是在折叠时向上滑动动画,而是立即消失。这是因为您将“可见性”设置为“已折叠”,因此没有可显示的内容

要解决此问题,请执行以下操作:

a) 使用MVVM:向ViewModel添加一些属性并触发它。通过ICommand修改属性

b) 不要设置可见性,只需在事件处理程序中启动适当的情节提要

private void Button_OnClick(object Sender, RoutedEventArgs E) {
        if (StackPanelShowHide.Visibility == Visibility.Collapsed) {
            StackPanelShowHide.Visibility = Visibility.Visible;
        } else {
            StackPanelShowHide.Visibility = Visibility.Collapsed;
        }

    }