4

高さプロパティをアニメーション化することにより、ItemsSource を拡大および縮小する画像にトリガーを設定したいと考えています。

ObservableCollection にバインドされたジェネリック ItemsSource があるため、このコントロールの合計の高さがわかりません。

画像をクリックすると、画像ソースのグリフが変更され、itemssource が展開されていることが示されます。もう一度クリックすると、最初のアニメーションが完了しない可能性があるため、ItemsSource は現在の高さから 0 に戻り始めます。

現在、次のイメージトリガーがあります。

<Image Name="ExpandImage" Source="ArrowDown.png">
            <Image.Triggers>
                <EventTrigger RoutedEvent="Image.MouseLeftButtonDown">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Height"                                                     
                                            Storyboard.TargetName="myItemsControl"
                                             From="0" To="300" Duration="0:0:2" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Image.Triggers>
        </Image>

固定の高さにアニメーション化するため、これは醜いです - ItemsControl の合計 (不明な高さ) にアニメーション化する必要があります。また、一方向 (エキスパンド) アニメーションのみをサポートします。

私のItemsControlは単純です:

 <ItemsControl Name="myItemsControl" 
        ItemsSource="{Binding Items}"  Height="0" >
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <c:CustomUserControl/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
4

1 に答える 1

1

アイテムコントロールの実際の高さは、ActualHeightプロパティで取得できます。問題は、それが依存関係のプロパティではないということです。ただし、Kent Boogaartがこの回答で行ったように、添付の動作を使用してバインドできます。

これにより、実際の高さにバインドできます。添付の動作を書くのはあなたに任せます。:)

于 2009-08-14T17:44:58.237 に答える