WPF动画-将元素滑入网格

时间:2019-02-11 20:57:46

标签: wpf xaml

我在这里查看了大多数“幻灯片动画”的答案,但似乎无法使我的工作正常进行,我认为这是因为我试图基于可见性来触发它。

简化后,我有一个网格,其中包含一个按钮,另一个网格在同一单元格中彼此堆叠。嵌套网格的可见性设置为“隐藏”,当单击按钮时,我希望嵌套网格变得可见并从左侧滑入。我有这个:

fig, ax = plt.subplots(figsize=(20, 20))
base = map_df.plot(ax=ax, color='gray')
gdf.plot(ax=ax, markersize=5)

但是,由于嵌套的网格填充了单元格的可用空间,所以只要将“可见性”设置为“可见”,它就会立即显示而不是滑入。我可以理解其背后的技术原因,但是弄清楚如何实现它的麻烦。我已经尝试过使用关键帧为“边距”设置动画,但这一点都不顺利。

注意:我出于示例目的对一些值进行了硬编码,例如DoubleAnimation中的From / To,并故意将其设置为较长的​​动画(3秒)。

我确定我缺少一些简单的东西...

编辑: 理想情况下,我希望动画由可见性更改触发,例如以下问题: WPF panel slide in from left animation

编辑#2: 每次我最终放弃并提出问题时,我都会在稍后找到答案。我认为这仅仅是因为我在嵌套Grid上缺少了RenderTransform / TRanslateTransform:

<Window x:Class="WpfApp8.MainWindow" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
        xmlns:local="clr-namespace:WpfApp8" 
        mc:Ignorable="d" 
        Title="MainWindow" 
        Height="350" 
        Width="525">
    <Grid>
        <Button x:Name="btnClickMe" Content="Click me!">
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.Click" SourceName="btnClickMe">
                    <BeginStoryboard>
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" 
                                                           Storyboard.TargetName="grdHello" 
                                                           Storyboard.TargetProperty="(UIElement.Visibility)">
                                <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Visible}"/>
                            </ObjectAnimationUsingKeyFrames>
                            <DoubleAnimation Storyboard.TargetName="grdHello" 
                                             Storyboard.TargetProperty="(Image.RenderTransform).(TranslateTransform.X)" 
                                             From="0" To="500" AccelerationRatio="0.2" DecelerationRatio="0.1" 
                                             Duration="0:0:3" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Button.Triggers>
        </Button>           
        <Grid x:Name="grdHello" Background="White" Visibility="Hidden">
            <TextBlock>Hello!</TextBlock>
        </Grid>
    </Grid> 
</Window>

0 个答案:

没有答案