1

ItemsControl に追加されたアイテムが追加されたときに高さをアニメーション化する必要があります。トリガーを使用した次のサンプルではうまくいきましたが、項目の高さが固定されていない場合 (この場合は 50) には動作しませんでした。

<ItemsControl ItemsSource="{Binding Notifications}">
<ItemsControl.Resources>
    <DataTemplate DataType="{x:Type Notifications1:Notification}">
        <Button x:Name="ItemButton"
                ClipToBounds="True"
                Height="0">
            <Button.Template>
                <ControlTemplate>
                    <Notifications:NotificationTile />
                </ControlTemplate>
            </Button.Template>
        </Button>
        <DataTemplate.Triggers>
            <EventTrigger RoutedEvent="FrameworkElement.Loaded"
                            SourceName="ItemButton">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="Height"
                                            Storyboard.TargetName="ItemButton"
                                            Duration="0:0:0.5"
                                            To="50" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>
</ItemsControl.Resources>

次に、VisualStateManager を使用してアニメーションを実行しようとしたため、タイルは必要な高さまで成長します。以下の例では、アイテムが正しいサイズで追加されていますが、アニメーションは実行されていません。EventTrigger も起動されていないと思いますか?

どんなアイデアでも大歓迎です!

<ItemsControl ItemsSource="{Binding Notifications}"
            Width="230"
            ScrollViewer.HorizontalScrollBarVisibility="Hidden"
            HorizontalContentAlignment="Stretch">

<ItemsControl.Resources>
    <DataTemplate DataType="{x:Type Notifications1:Notification}">
        <Button x:Name="ItemButton"
                ClipToBounds="True"
                Command="{Binding DataContext.ItemClicked, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
                CommandParameter="{Binding}"
                Visibility="{Binding IsVisible, Converter={StaticResource boolToVisibilityConverter}}">
            <Button.Template>
                <ControlTemplate>
                    <Notifications:NotificationTile />
                </ControlTemplate>
            </Button.Template>

            <VisualStateManager.CustomVisualStateManager>
                <is:ExtendedVisualStateManager />
            </VisualStateManager.CustomVisualStateManager>
            <VisualStateManager.VisualStateGroups>
                <VisualStateGroup is:ExtendedVisualStateManager.UseFluidLayout="True">
                    <VisualStateGroup.Transitions>
                        <VisualTransition GeneratedDuration="0:0:2" />
                    </VisualStateGroup.Transitions>
                    <VisualState x:Name="Collapsed">
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="(FrameworkElement.Height)"
                                                Storyboard.TargetName="ItemButton"
                                                Duration="0"
                                                To="0" />
                        </Storyboard>
                    </VisualState>
                    <VisualState x:Name="Expanded">
                        <Storyboard>
                            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)"
                                                            Storyboard.TargetName="ItemButton">
                                <DiscreteDoubleKeyFrame KeyTime="0"
                                                        Value="NaN" />
                            </DoubleAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>

            <i:Interaction.Triggers>
                <i:EventTrigger SourceName="ItemButton"
                                EventName="(FrameworkElement.Loaded)">
                    <is:GoToStateAction StateName="Expanded" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Button>
    </DataTemplate>
</ItemsControl.Resources>

4

1 に答える 1

0

ちょっとネタバレかもしれませんが、ご容赦ください。あなたの質問を完全に理解したかどうかわかりません。とにかく、「From」はもともと Double.NaN に設定されており、この場合 DoubleAnimation は機能しないため、「To」のみのアニメーションを使用することは一般的に推奨できません。

于 2012-08-15T11:04:20.387 に答える