【问题标题】:ListBox Slide Animation On New Item Added添加新项目的列表框幻灯片动画
【发布时间】:2012-10-24 10:50:53
【问题描述】:

我正在处理新闻提要。这会经常更新,如果发现新项目,我想从顶部滑入新内容。

现在,我只是通过执行以下操作使其淡入:

<ListBox Grid.Row="0" Height="Auto" HorizontalAlignment="Stretch" Margin="5,5,5,5"  VerticalAlignment="Top" ItemsSource="{Binding NewsItems,UpdateSourceTrigger=PropertyChanged}" >
        <ListBox.ItemContainerStyle>                
            <Style TargetType="{x:Type ListBoxItem}">                    
                <Style.Triggers>                                        
                        <EventTrigger RoutedEvent="Loaded">
                        <EventTrigger.Actions>                                
                            <BeginStoryboard>
                                <Storyboard>                                      
                                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2" />     
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger.Actions>
                    </EventTrigger>
                </Style.Triggers>
            </Style>
            </ListBox.ItemContainerStyle>
        <ListBox.ItemTemplate>    
        ....
</ListBox>

这很好用,但我真的很想把这个项目滑进去。我已经尝试了所有我能找到的可能的东西,但无法到达任何地方。任何帮助将不胜感激。

【问题讨论】:

    标签: wpf animation listbox


    【解决方案1】:

    这就是你要找的吗?

     <ListBox x:Name="lstBox" Grid.Row="0" Height="Auto" HorizontalAlignment="Stretch" Margin="5,5,5,5"  VerticalAlignment="Top" ItemsSource="{Binding NewsItems,UpdateSourceTrigger=PropertyChanged}" >
            <ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}">
                    <Setter Property="LayoutTransform">
                        <Setter.Value>
                            <ScaleTransform x:Name="transform" />
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <EventTrigger RoutedEvent="Loaded">
                            <EventTrigger.Actions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2" />
                                        <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleY" From="0" Duration="0:0:.2"/>
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger.Actions>
                        </EventTrigger>
                    </Style.Triggers>
                </Style>
            </ListBox.ItemContainerStyle>
        </ListBox>
    

    【讨论】:

    • 做到了。我忽略了添加 setter 属性。谢谢!
    • 我希望我能多次投票!如此简单,正是我想要的!谢谢!
    • 这很酷。不幸的是,UnLoad 甚至不能以相同的方式工作,以删除该项目。我最终使用 Arrange 和 Measure 调用实现了自定义面板
    • 不幸的是,此动画也发生在我的 WPF 应用程序的子页面之间切换期间(在我切换到包含 ListView 的子页面后,所有 ListView 元素都会触发 Loaded 事件并进行动画处理)。是否可以将此动画仅限于新添加到 ListView 的项目 - 仅在构造 ListItem 的底层 ViewModel 之后的第一次?
    猜你喜欢
    • 1970-01-01
    • 2016-09-23
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 2018-01-12
    相关资源
    最近更新 更多