ListBox Slide Animation On New Item Added

2019-02-01 13:14发布

问题:

I am working on a news feed. This will update every so often and if new items are found, I want to slide in the new content from the top.

Right now, I am just having it fade in by doing the following:

<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>

This works fine, but I would really like to have the item slide in. I have tried every possible thing I could find and cannot get anywhere. Any help would be much appreciated.

回答1:

Is this what you're looking for?

 <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>